java中byte、short、int、long都是以二进制补码表示的整数
原码
最高位为符号位,0表示正数,1表示负数,其余位为正常的二进制表示
5的原码:00000000 00000000 00000000 00000101
-5的原码:10000000 00000000 00000000 00000101
反码
正数:与原码一样
负数:符号位不变还是为1,其余位取反
5的反码:00000000 00000000 00000000 00000101
-5的反码:11111111 11111111 11111111 11111010
补码
正数:与原码一样
负数:补码加1
5的补码:00000000 00000000 00000000 00000101
-5的补码:11111111 11111111 11111111 11111011
验证
验证整数是以二进制补码的表示的
1 | public class Test5 { |
结果为如下所示
1 | 5的补码:101 // 高位29个零省略 |
总结
- java中整数都是以二进制补码表示
- 最高位符号位,0表整数,1表负数
- 正数:原码、反码、补码都一样
- 负数:反码为原码的符号位不变,其余位取反;补码为反码加1
- 负数:可以反推出反码为补码减1,原码为反码符号位不变,其余位取反