假设我想用 8 位表示 128 的 1 和 2 的补码,没有符号位
那岂不是:
一个人的补充:0111 1111
二进制补码:0111 1110
无溢出
但正确答案是:
一个人的补充:0111 1111
二进制补码:0111 1111
溢出
附加问题:
1 和 2 的补码中的 1 分别是0000 0001
和0000 0001
。你怎么不像我们用 128 那样翻转位?
假设我想用 8 位表示 128 的 1 和 2 的补码,没有符号位
那岂不是:
一个人的补充:0111 1111
二进制补码:0111 1110
无溢出
但正确答案是:
一个人的补充:0111 1111
二进制补码:0111 1111
溢出
附加问题:
1 和 2 的补码中的 1 分别是0000 0001
和0000 0001
。你怎么不像我们用 128 那样翻转位?
One's 和 Two's Complements 都是表示有符号整数的方法。
对于一个人的补码表示:
对于二进制补码表示:
Therefore, 128 overflows in both instances because the binary representation of 128 is 1000 0000 which in ones complement represents -127 and in twos complement represents -128. In order to be able to represent 128 in both ones and twos complement you would need 9 bits and it would be represented as 0 1000 0000.
在 8 位无符号数中,128 是1000 0000
. 在 8 位二进制补码中,该二进制序列被解释为 -128。8 位二进制补码中没有 128 的表示。
0111 1110
是 126。
正如评论中提到的,0111 1111
是 127。
见https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html。
二进制补码和一个补码都是表示负数的方式。正数只是二进制数;不涉及补充。
我在一台带有补码算法(LINC)的计算机上工作。我非常喜欢二进制补码,因为零只有一种表示形式。二进制补码的缺点是有一个值(-128,对于 8 位数字)不能被否定 - 导致您询问的溢出。一个人的补码没有这个问题。