2的补码表示也用于正数吗?

时间:2016-10-31 12:15:28

标签: c integer unsigned-integer

我写的时候:

signed int a = 4;

是我的电脑使用2的表示吗?

因为如果我的计算机使用2的补码表示来表示数字4,那么8位机器上会发生这种情况:

二进制值4:0000 0100

2的补充变为:1111 1011

加1:1111 1100

但是我读到当最重要的位为1时,你的数字是负数。但是这里我最重要的位是1而我的数字是4。它不是-4。

为什么我的数字4的最高位为1?

3 个答案:

答案 0 :(得分:2)

  

2的补充变为:1111 1011

没有。你从哪里得到这个想法? 1111 1011是两个补码中的-5-5不是+4

-4也与+4不同。

4的二进制值为0000 0100. 4的带符号数字变量表示也为0000 0100。

除非数字是负数,否则两个补码是无关紧要的。

  

为什么我的数字4的最高位为1?

没有。您的-4有一个ms作为msb。

答案 1 :(得分:0)

初始化as:

signed int a;

机器将最后一位(MSB)保留为正值或负值的标记。

0表示正面

1表示否定

当你取2的补数时,取1的补码并加1(关于问题的措辞混淆) 你否定了你正在使用的数字。

所以当你做4的2的补码时,得到1111 1100,这是-4的二进制表示法 由于这是负数,因此您将MSB设为1

答案 2 :(得分:0)

在某种意义上,有符号整数在" 2"中,因为它需要为符号保留最左边的位。 " 2'补充"通过使用"翻转位+ 1"来说明如何使正整数为负。 暗示是正整数在base 2中,只能使用n-1位,n是int中的位数。

所以" 2'补充"是一种用二进制表示负数的方法,而不是用二进制表示正数。

相关问题