1 JAVA已知long型的最大值为9223372036854775808,求9223372036854775808+9223372036854775808 为什么等于-

1 JAVA已知long型的最大值为9223372036854775808,求9223372036854775808+9223372036854775808 为什么等于-2?

溢出了
long最大不是9223372036854775808而是9223372036854775807
因为最高位是符号位,两个相加就溢出了,符号位本来是正,所以是0,但是相加后溢出,符号位变成1,所以就成负数了

Long.MAX_VALUE=9223372036854775807
其二进制值为:0x7FFFFFFFFFFFFFFF,因为最高位是0,留给符号位,其他位为1
如果让Long.MAX_VALUE+Long.MAX_VALUE
则看二进制值,相当于左移一位,变成:
0xFFFFFFFFFFFFFFFE
最低位为0,其他位为1,第一位符号位为1,则为负数,下面各位取补码,即取反+1,得0x10,为2,所以结果是-2
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-14
溢出了,去看看二进制吧
相似回答