整型数据在32位操作系统中,是32位二进制即4个字节。在64位操作系统中,是64位二进制即8个字节。 下面的例子为了简单,以16位即两个字节表示整型数据。
整数数值在内存中以 补码
的形式存储的:
- 整数的补码和原码相同
- 负数的补码:将该数的绝对值的二进制形式按位取反再加1
int i = 10;
// 原码:0000 0000 0000 1010
// 补码:0000 0000 0000 1010
int j = -10;
// 原码:1000 0000 0000 1010
// 补码:1111 1111 1111 0110
int max = 32767; // 2^15 - 1
// 原码:0111 1111 1111 1111
// 补码:0111 1111 1111 1111
int min = -32768; // -2^15
// 原码:1000 0000 0000 0000
// 补码:1000 0000 0000 0000
从上面的存储方式,我们可以发现,有符号的整型数据在存储时,负数的最大值会比正数的最大值大1。这是因为计算机在表示
0
时,用的是+0
,而-0
表示负数最大值。