1

二进制补码如何工作?例如:

5: 00000101
-5 (two's complement): 11111011

如何判断后者应该是 251 还是 -5?

4

4 回答 4

4

他们都是,也没有。11111011只是一种位模式 - 如果用于某些运算(例如算术),它只会获得一些固有的意义。

根据您使用的操作,解释可能不同 - 使用 2 的补码的原因是,例如在整数算术中,操作的位模式结果将是正确的,无论您将其解释为有符号还是无符号。

于 2012-09-20T01:25:28.447 回答
2

你不能!这就是许多语言都有有符号和无符号类型的原因。因此编译器/解释器知道是将二进制值解释为有符号(二进制补码)还是无符号。

于 2012-09-20T01:09:48.217 回答
1

为了更好地理解二的补码,请查看维基百科页面

位串的解释取决于将使用该数据的指令。如果将变量声明为无符号位,则该位将被解释为常规二进制数。否则,如果将其声明为有符号变量,则将其解释为二进制补码值。

于 2012-09-20T02:04:07.243 回答
1

如果它是一个有符号整数,它的最高有效位将作为它的符号位。如果符号位为 0,则该数字为正数。如果符号位为 1,则该数字为负数并以 2 的补码形式表示,编译器执行 2 的补码操作来处理这些负整数。

但是在明确声明为“unsigned int”的无符号整数的情况下,没有符号位,也没有 2 的补码解释。

因此,对于有符号的 8 bin int 11111011 是 5 的 2 的补码,因此代表 -5,但对于无符号的 8 位 int 11111011 是 251,如您所述。

于 2012-11-16T19:44:21.530 回答