(已废弃)Integer.toBinaryString(-1)为什么是11111111 11111111 11111111 11111111

参考新文一文搞明白位运算、原码、反码、补码
此文为32位二进制
连续的32位容易混乱,我用8位一组的方式分割

正数的二进制

原码,反码,补码相同,也就是二进制数

负数的二进制

原码:第一位表示符号,0表示正,1表示负

  • 00000000 00000000 00000000 000000011的原码
  • 10000000 00000000 00000000 00000001-1的原码
    反码:除了第一位符号,其他位都取反,0换1,1换0
  • 10000000 00000000 00000000 00000001-1的原码
  • 11111111 11111111 11111111 11111110-1的反码
    补码:反码+1,也就是所表示的二进制数
  • 11111111 11111111 11111111 11111110-1的反码
  • 11111111 11111111 11111111 11111111-1的补码

1的二进制表示

因为正数的原反补码相同
00000000 00000000 00000000 000000011的原码
00000000 00000000 00000000 000000011的反码
00000000 00000000 00000000 000000011的补码 也就是1的二进制表示

-1的二进制表示

10000000 00000000 00000000 00000001-1的原码
11111111 11111111 11111111 11111110-1的反码
11111111 11111111 11111111 11111111-1的补码 也就是-1的二进制表示

-12的二进制表示

10000000 00000000 00000000 00001100-12的原码
11111111 11111111 11111111 11110011-12的反码
11111111 11111111 11111111 11110100-12的补码 也就是-12的二进制表示