00000000
负整数0的原码,符号位1,其它位0
--
10000000
(假定共8位,最高位是符号位)
负整数0的反码,符号位不变,为1,其它位0变1,--
11111111
负整数0的补码,等于它的反码加1
--
11111111
+
1
=
[1]00000000
方括号里的1因溢出,自动丢失,成为
00000000
所以正整数0和负整数0的补码相同,00000000
带符号整数的补码 10000000(二进制),表示的十进制是多少?
求补码,有定义式的。
当 X < 0: X 的补码 = 2^n -| X |。
当 n = 8,即有: 补码 = 256 + X。
若,补码 = 1000 0000 = 128(十进制),
则,X = 128-256 = -128。
-128
----------------------
符号位是1,代表是负数;
数值位共7个0,求反+1是:111
1111
+
1
=
1000
0000
数值就是128。
所以是:-128。
-128
这个数感觉比较特殊,第一位即表示符号有表示数值,其实你如果要求一个负数的补码,只要把这个数的正数的补码包括符号位在内每位取反末尾加一就可以了,得到的就是包括符号位的这个负数的补码,但是如果最高位也就是符号位仍然有向更高位的进位,则溢出错误。
表示-128
8位二进制数的原码、反码和补码对照表见图片,点击图片放大