我写的时候:
signed int a = 4;
是我的电脑使用2的表示吗?
因为如果我的计算机使用2的补码表示来表示数字4,那么8位机器上会发生这种情况:
二进制值4:0000 0100
2的补充变为:1111 1011
加1:1111 1100
但是我读到当最重要的位为1时,你的数字是负数。但是这里我最重要的位是1而我的数字是4。它不是-4。
为什么我的数字4的最高位为1?
答案 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'补充"是一种用二进制表示负数的方法,而不是用二进制表示正数。