假设我想用8位代表128和2的补码,没有符号位
不会是:
一个补充:0111 1111
两个补码:0111 1110
没有溢出
但正确的答案是:
一个补充:0111 1111
两个补码:0111 1111
溢出
其他问题:
为什么1和2的补码分别为0000 0001
和0000 0001
。你怎么不像我们用128做的那样翻转位?
答案 0 :(得分:4)
一个人和两个人的补语都是表示有符号整数的方法。
对于其补充代表:
对于两人的补充陈述:
因此,在两个实例中都有128次溢出,因为128的二进制表示是1000 0000,其中一个补码表示-127,而二进制补码表示-128。为了能够在两个和两个补码中表示128,你需要9位,它将表示为0 1000 0000。
答案 1 :(得分:3)
在8位无符号中,128是1000 0000
。在8位二进制补码中,该二进制序列被解释为-128。在8位二进制补码中没有128的表示。
0111 1110
是126。
如comment中所述,0111 1111
为127。
请参阅https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html。
两个补语和补语都是表示负数的方法。正数只是二进制数;没有补充。
我使用一个补码算术(LINC)在一台计算机上工作。我非常喜欢两个补码,因为只有一个表示为零。两个补码的缺点是有一个值(-128,对于8位数字)不能被否定 - 导致你要问的溢出。唯一的补充并没有这个问题。