如果我将二进制数000000转换成2对恭维,我会得到 1' s恭维(反转)= 111111 2恭维(加+1)=这里我遇到了一个问题,这会返回000000而1被丢弃还是会返回1000000?
提前致谢!
答案 0 :(得分:0)
丢弃1
。条件类似于Arithmetic Overflow。
两个补码的优点在于它有助于我们在考虑有符号数时保留二进制表示,因为在数学中,0
的值与-0
的值相同。如果我们只需要为符号放弃一整位,那么,在4位字中,0000
表示0
而1000
表示-0
,浪费一个表示。这两个补充有助于摆脱这一点。如果我们假设4位字:
val -val bits of val two's complement bits of -val (1's complement + 1)
0 0 0000 0000 (1111+0001)
1 -1 0001 1111 (1110+0001)
2 -2 0010 1110 (1101+0001)
3 -3 0011 1101 (1100+0001)
...
7 -7 0111 1001 (1000+0001)
8 -8 (no rep) 1000 (0111+0001)
(请注意,对于-8
,您以无符号方式得到8
的一个补码,即8 = 1000
,因此其一个补码为0111
)。
因此,您通过使-8
和0
具有相同的位模式(即-0
)来获得0000
的表示。使用此项,对于n
位,我们可以在-2^(n-1)
到2^(n-1)-1
之间表示所有整数值。