例如:-1 原码:1000 0001 反码:1111 1110 补码:1111 1111
例如:1 - 2
1的原码: 0000 0001
-2的原码: 1000 0010 反码: 1111 1101 补码: 1111 1110
1+(-2)的计算为:
0000 0001
+ 1111 1110
= 1111 1111
1111 1111 反码: 1000 0000 补码: 1000 0001 -> -1
所以1-2的结果为 -1
byte a = 127;
byte b = (byte) (a +1); // 需要进行类型转换
System.out.println(b); // -128
为什么结果会是-128呢? 我们可以尝试用二进制计算下:
127 + 1 :
0111 1111
+ 0000 0001
= 1000 0000 反码:1111 1111 补码:1 0000 0000 -> 256 (不过-0 这个二进制是不能求反码和补码的)
例如:十六进制的0x5 就是二进制的 0101
int类型的最大值在Integer包装类型中定义了个常量:0x7fffffff
十六进制表示为:
0111 1111 1111 1111 1111 1111 1111 1111
所以int类型的最大值为 2^31(2147483647)
最小值同理 -2^31-1(-2147483648)