同一个十进制二进制整数的有符号负数和正数版本之间有什么关系?

What is the relationship between signed negative and positive versions of the same binary integer in decimal?

我想先说明这个问题,乍一看这是关于 SO 的其他几个问题的重复,但是 none 这些问题的答案回答了我的问题,因此我是问吧。

解释为正整数的二进制整数与解释为十进制负整数的完全相同的二进制整数之间有什么关系?让我们以整数 5 为例:

5 等于 101

-5 为 11111011

11111011 解释为无符号数时为 251。

问题是,-5和251之间的十进制关系是什么?除了在二进制数系统中发生的作用之外,是否有直接关系?意思是,十进制是否有一些规则,我们可以直接将任何给定的十进制整数映射到相同的二进制整数从正数转换为负数时的十进制整数,反之亦然?

请注意,-5 实际上不是二进制的 11111011,而是 八位 的二进制表示。如果你使用不同的位数,你会得到不同的二进制表示。例如,如果您使用 16 位,就像通常那样,您会得到 1111111111111011,即 65531.

这才是关键。在八位中,我们考虑 2^8256。 (插入符号代表求幂。)然后我们看到 -5256 - 5.

表示

所以最后的答案是这样的:对于一个给定的正整数n,它要用b个二进制位来表示,然后数字-n用[=23表示=]

(2 ^ b) - n

至少,如果位数 b 足够大。明白了吗?可以说的远不止于此,但您最好在书籍或大型网页中阅读更多关于二进制补码符号的内容。

假设我们使用两个补码,我们有一个 n 位的向量:

n = <a(n-1), a(n-2), ..., a(2), a(1), a(0)>

解释为:

n_signed = -[a(n-1) * 2^(n-1)] + sum(i=0, i=n-2) {a(i) * 2^(i)}

然而,将其视为无符号会导致:

n_unsigned = sum(i=0, i=n-1) {a(i) * 2^(i)}

因此区别是:

n_unsigned - n_signed = 2 * [a(n-1) * 2^(n-1)]

希望对您有所帮助(对于格式不佳,我们深表歉意)。