2013-05-06 76 views
2
System.out.println(Integer.MAX_VALUE); 
System.out.println(Integer.MIN_VALUE); 

打印:为什么符号位不会影响Integer.MAX_VALUE,但会影响MIN值?

2147483647 
-2147483648 

为什么最大值2^31 -1(符号位为0,并且不增加数字的值),但min值只是-2^31(符号位是1并确实加上了那个值?)。

+0

从'0'到'n'的不同值的数目是'n + 1'。从“0”到“Integer.MAX_VALUE”的不同值的数量是2^31。 – 2013-05-06 02:11:22

回答

5

想想这样:你有许多二进制模式,符号位设置为1作为符号位设置为0的二进制模式的数量。但是,您也需要表示零,这既不是正数也不是负数。由于0表示为全零的模式,因此它从可用给定位数表示的正数中减去,因此可表示的负数的数量将大于1。

0

符号位不会添加到值。您可以用32位表示2^32个不同的值。 Hovewer,其中的一个值是0;所以有2^31的负值,2^31 - 1的正值和0,这些都加起来有2^32个不同的值。由于0的符号位也是0,所以正值的数量比负值的数量少一个是自然的。