我想通过说一开始看起来像是SO上其他几个问题的重复来开头这个问题,但是这些问题的答案都没有回答我的问题,因此我在问这个问题。
以十进制表示的二进制整数与被解释为负整数的二进制整数之间的关系是什么?让我们以整数5为例:
5是101
-5是11111011
11111011在解释为无符号数字时为251。
问题是,-5和251之间的十进制关系是什么?除了二进制数字系统中发生的操作以外,还有直接关系吗?意思是,十进制中是否存在一些规则,我们可以将任何给定的十进制整数直接映射到十进制整数,当从正数转换为负数时,对于相同的二进制整数,反之亦然?
答案 0 :(得分:2)
请注意,-5
实际上不是二进制的11111011
,也就是八位的二进制表示形式 。如果使用其他位数,则会得到不同的二进制表示形式。例如,如果您经常使用16位,则会得到1111111111111011
,即65531
。
这就是关键。在八位中,我们考虑2^8
,即256
。 (该插入符号代表幂。)然后我们看到-5
由256 - 5
表示。
所以最后的答案是这样的:对于要以n
个二进制位表示的给定正整数b
,数字-n
表示为
(2 ^ b) - n
至少,如果b
位的数量足够大。明白了吗?可以说的还不止这些,但是最好还是在书或大型网页上阅读更多有关二进制补码的信息。
答案 1 :(得分:0)
假设我们使用两个补数,那么我们有一个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)]
希望它会有所帮助(对不起,格式化不好)。