use*_*754
2
c
signed
twos-complement
- 我知道有符号整数中的最高有效位用于对符号进行编码。
- 我还发现负整数几乎总是被编码为其二进制的 2 的补码。
我无法调和上述两个事实。
如果我们看这里的-128的例子,在编码时采取以下步骤
- 找出 128 的二进制等价物:
10000000
- 取 1 的补码:
01111111
- 将 1 与 1 的补码相加得到 2 的补码:
10000000
我的问题是:sign bit负整数的在哪里?换句话说,我想了解如何10000000解码为-128 而不是-0
- 如果使用最左边的 1 (MSB) 来编码 -128 的负号,那不是给我们留下了 7 位二进制 0000000,其十进制等效值为 0(而不是 -128)?
- 或者计算机是否(当然是比喻性的)——当对存储在某个内存位置的负整数执行计算时——以相反的顺序执行上面的步骤 1-3,以在它看到 1 时解码 1 字节字符的值最重要的位(而不是 0)?
- 或者是MSB对-128中第8位(2 ^ 7)的符号和位进行编码。
我已经看到了这个问题,但我的不同,因为我很清楚 +128 不能存储在 1 字节中,因为它的有符号二进制将转换为0100000000需要 9 位。