• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Math Operators

 
Ranch Hand
Posts: 515
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Okay.. so here's the question...
When doing multiplication and you have 2 ints, will you always get an INT as an anwer, and if not, what does it change to and how do I know the differences.. when to change the type and when not to.
Thanks
Dale
------------------
What's this H2SO4 doing in my fridge?? ( thud )
 
Greenhorn
Posts: 12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I believe that you always get an int result (or a larger data type) as a result of an arithmetic operation.
If your operation involves data types narrower than an int, they are implictly converted to ints - that's what I believe anyway.
Say:
byte a = 2;
byte b = 3;
byte c = a * b; // will not work, as result is int type
but....
byte c = (byte) a * b; // will work...

But say you did:

double a = 2.0;
double b = 3.0;
double c = 0.0;
c = a * b;
System.out.println ("Result: " + c);
This would return a doube result ok.
 
Sheriff
Posts: 17644
300
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The result of any arithmetic operation on 2 ints will always be an int. The result value may or may not be mathematically correct though as any overflow / underflow is ignored and you simply get back the low order 32 bits of the result.
You can convert the integer result to another type by assigning it to a variable of that type, using a cast if necessary. However, any overflow or underflow will already be lost. Consider the following code:

<pre>
int i = (Integer.MAX_VALUE) + 5;
System.out.println(i); // -2147483644
long l = (Integer.MAX_VALUE) + 5;
System.out.println(l); // -2147483644 - same result as before!
</pre>
The result is the same even if you assign it to a long because the overflow was already lost. However, if you cast one of the operands to long, the whole result will be long (64 bits) and you won't lose any precision.
<pre>
long l = (long)(Integer.MAX_VALUE) + 5;
System.out.println(l); // 2147483652 - correct result
</pre>

[This message has been edited by JUNILU LACAR (edited July 09, 2001).]
 
reply
    Bookmark Topic Watch Topic
  • New Topic