关于primitive types的范围之类的面试题

2014-05-10 06:30:02 阅读( 157 )

2151人 收藏本页

标签:Java面试题

Java的开发面试题里面经常爱问关于primitive types的范围之类的问题,例如一个short能表达的整数值范围是多少,诸如此类的。这种题型的目的是看看程序员对于Java Fundamental到底了解多少,实际上有的刁钻问题甚至连老鸟都能蒙住……
看到一道蛮有意思的基础问题,贴出来一起学习一下:

int min = 0x80000000; // minimum integer int opp = -min; // get opposite number int sum = min + opp;问min, opp, 和sum求出来是多少?


首先要明确一点,对于32bit的整形int而言,0×80000000所表示的是多少?
因为最高位是符号位(sign),所以最大的int所代表的是0x7FFFFFFF,换算为十进制(decimal)也就是2147483647。
根据补码的定义,最小的32bit int应该是0×80000000,因此换算为十进制的值就是-2147483648.
在Java中,如果用int来存储这个MIN的相反数,得到的还是它自身。看起来这个结果很无厘头,1的相反数是-1;2的相反数是-2;为什么到了最大的负数这里它的相反数就是它自身呢??

为什么为什么为什么……
原因在于补码计算相反数。先取反,再加一。
0×80000000 -> 0x7FFFFFFF -> 0×80000000
所以就得到了上面的结果——min的相反数还是自身。
因此, (0×80000000) = -0×80000000 = -2147483648

有了上面的结果,最后一个求和的结果就相对容易理解了。
两个最小整数相加之后,结果溢出了,最后所能够得到的sum就是0。




来自IT公司面试手册

下一篇:Java基础知识内部测试笔试试题

上一篇:几个关于Java内存泄露方面的面试题

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息: 面试题