Granny's Programming Pearls
"inside of every large program is a small program struggling to get out"
JavaRanch.com/granny.jsp
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Math.abs()

 
Savio Mascarenhas
Ranch Hand
Posts: 108
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Q24
What will be the result of attempting to complie & run the following code?
public class ADirtyOne
{
public static void main(String args[])
{
System.out.println(Math.abs(Integer.MIN_VALUE));
}
}
(a)Causes a compilation error
(b)Causes no error and the value printed on the screen is less than zero.
(c)Causes no error and the value printed on the screen is one more than the Integer.MAX_VALUE
(d)Will throw a runtime exception due to overflow - Integer.MAX_VALUE is less in magnitude than Integer.MIN_VALUE.

The answer is (b).
Java API Quote:
***************
"Note that if the argument is equal to the value of Integer.MIN_VALUE, the most negative representable int value, the result is that same value, which is negative."
An absolute +ve value is displayed in the case of Byte.MIN_VALUE & Short.MIN_VALUE.Why not so in the case of an int.???
 
Praveen Zala
Ranch Hand
Posts: 118
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This has got to do with the signed or unsigned
primitive types..... Byte does not store the sign bit
 
Adrian Yan
Ranch Hand
Posts: 688
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Reason for byte and short works because they are converted to "int" before the operation. "static int abs(int i)", it takes "int" as argument, if you pass in byte or short, they are implicitly converted to integer.
Both byte and short are signed, meaning they have sign bits. The only unsigned primitive is char.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic