0 为正数jvm
原码 00000000 00000000 00000000 00000000 反码 00000000 00000000 00000000 00000000 正数反码等于原码 补码 00000000 00000000 00000000 00000000 正数补码等于原码
0 为负数
原码 10000000 00000000 00000000 00000000
反码 11111111 11111111 11111111 11111111 负数反码等于原码符号位不变,其他取反
补码 00000000 00000000 00000000 00000000 负数补码等于反码+1spa
用补码
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
用反码
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0code
数值 | 原码 | 反码 | 补码 |
---|---|---|---|
+0 | 0000 0000 | 0000 0000 | 0000 0000 |
-0 | 1000 0000 | 1111 1111 | 0000 0000 |
负数原码转补码,最高位不变,其他取反,而后 +1
10000001
11111110
11111111
负数补码转原码,最高位不变,其他取反,而后+1 补码->反码->原码->反码->补码 ,(二进制数,先-1再取反和先取反后+1,结果同样)
11111111
10000000
10000001 rem
负数反码转原码
符号位不变,其他取反
11111111
10000000get
区别:it
补码能够多表示一个范围,实际上是利用补码 10000000 的原码是 = -128table
左移的规则只记住一点:丢弃最高位(符号位),0补最低位class
左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不一样的环境填补方式可能不一样;
低位右移溢出则舍弃该位。二进制
左边空出的位用0填补,低位右移溢出则舍弃该位。im
感谢您的耐心阅读,若是您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,您的鼓励是做者写做最大的动力。
做 者 : @mousycoder