如果我将二进制数 000000 转换为 2 的补码,我将得到 1 的补码(反转)= 111111 2 的补码(加 +1)= 这里我遇到了一个问题,这是返回 000000 并且 1 被丢弃还是返回 1000000?
提前致谢!
如果我将二进制数 000000 转换为 2 的补码,我将得到 1 的补码(反转)= 111111 2 的补码(加 +1)= 这里我遇到了一个问题,这是返回 000000 并且 1 被丢弃还是返回 1000000?
提前致谢!
它丢弃1
. 条件类似于算术溢出。
二进制补码的优势在于它有助于我们在考虑有符号数时保留二进制表示,因为在数学中, 的值与 的值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