java整型的原码反码与补码表示

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
2
3
4
5
6
public class Test5 {
public static void main(String[] args) {
System.out.println("5的补码:" + Integer.toBinaryString(5));
System.out.println("-5的补码:" + Integer.toBinaryString(-5));
}
}

Click and drag to move

结果为如下所示

1
2
5的补码:101 // 高位29个零省略
-5的补码:11111111111111111111111111111011

Click and drag to move

总结

  • java中整数都是以二进制补码表示
  • 最高位符号位,0表整数,1表负数
  • 正数:原码、反码、补码都一样
  • 负数:反码为原码的符号位不变,其余位取反;补码为反码加1
  • 负数:可以反推出反码为补码减1,原码为反码符号位不变,其余位取反