计算机如何知道二进制补码表示的数字是负数?

10
例如,10000001在二进制补码中表示的是-127,但它也等于129。我或计算机如何知道它所代表的数字是哪一个?
3个回答

3


为了演示目的,我将使用4位整数。二进制补码数系统用二进制数字表示正负数。每个位的权重都是2的幂,除了最高有效位(最左边的位),它的权重是相应的2的幂的相反数
例如:让我们转换这些二进制补码数:1110、0111、1001。 1110= -23 + 22 + 21 + 0*20 = -2 0111= -23*0 + 22 + 21 + 20 = 7 1001= -23 + 0*22 + 0*21 + 20 = -7
备注:最左边的位给出了数字的符号。如果是“0”,则数字为正;否则为负。

所以,回到你提供的例子:

10000001 = -27 + 0 + 0 + 0 + 0 + 0 + 0 + 1= -127(而不是129)

那么,如何用二进制补码表示129呢?

要用二进制补码表示129,需要超过8位,因为计算机需要额外的一位来表示数字是正数。不清楚吗?假设我们在一个16位系统中,这里是-127和129的存储方式:
-127= 10000001
129= 00000000 10000001 (最左边的位为0表示数字是正数)

如果你仍然怀疑是否可以用8位的二进制补码表示129:请记住,在一个n位系统中,可以用二进制补码表示的值位于区间[-2n-1,2n-1-1]。这里,n=8位。因此,该区间为[-128,127],这清楚地表明129超出了范围。

https://en.wikipedia.org/wiki/Two's_complement

0

对于带符号的8位整数表示,最高有效位表示符号。因此,你有7位来表示值本身。对于无符号的8位整数表示,所有8位都用于表示值,因为在这种表示中,数字已经被假定为正数。


0
我或计算机如何知道它所指的是哪个数字?
这取决于给定数字是有符号还是无符号。
有符号
有符号值可以是正数或负数。计算机使用第一位来表示这一点。如果第一位是1,则该数字为负数。如果第一位是0,则该数字为正数。要确定数字的值,使用其他7位。
因此,对于有符号的10000001,它将意味着-1。
无符号
无符号值仅为正数。由于不需要指示数字是正数还是负数,因此将使用所有8位来确定数字的值。
对于无符号的10000001,它将意味着129。

1
1000 0001 等于 -127,而不是 -1。 - Murphybro2
第一位有点令人困惑,因为两边都有1。考虑使用MSB和LSB术语。 - Roi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接