栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > Java面试题

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

Java面试题 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/264196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号