int的正负数I
int的正负数
首先要了解什么是二进制的反码和补码。
以下为一个int类型的二进制数字:
00000000 00000000 00000000 00101101
他所代表的十进制数字为45。
该二进制的反码即为:
11111111 11111111 11111111 11010010
即0变成1,1变成0。
而该二进制的补码则是反码+1:
11111111 11111111 11111111 11010011
java中int类型的整数是由4字节的比特表示,其中有31位来表示数据的大小,其范围为-231到231-1之间,第一位用来表示正负数。
即:
00000000 00000000 00000000 00101101
加粗的部位即为该int类型值的大小。
其最大值为:
01111111 11111111 11111111 11111111
其最小值为:
10000000 00000000 00000000 00000000
为什么最小值为上值呢?
因为231为
10000000 00000000 00000000 00000000
其取反为
01111111 11111111 11111111 11111111
再补码+1为
10000000 00000000 00000000 00000000
且其第一位为0,所以该二进制数据即可表现为int数据中的最小值,也所以231不能表现出来,int最大值为31-1,基本没有任何的浪费。
以上最大值和最小值换位16进制分别为:
0x7FFFFFFF
0x80000000
-1的补码计算如下:
先获取1的原码:
00000000 000000000 00000000 00000001
反码:
11111111 11111111 11111111 11111110
补码:
11111111 11111111 11111111 11111111