当我补充1(~1)时,我得到输出为-2。这是如何在内部完成的?
我首先假设这些位被反转,因此0001变为1110然后加1,所以它变为1111存储,然后检索数字是多少?
答案 0 :(得分:3)
嗯,不。当你补1时,你只需反转位:
1 == 0b00000001
~1 == 0b11111110
这是两个补码中的-2,这是你的计算机内部代表负数的方式。请参阅http://en.wikipedia.org/wiki/Two's_complement,但以下是一些示例:
-1 == 0b11111111
-2 == 0b11111110
....
-128== 0b10000000
+127== 0b01111111
....
+2 == 0b00000010
+1 == 0b00000001
0 == 0b00000000
答案 1 :(得分:1)
Whar你的意思是“当我补充1(~1)时,”?有所谓的 Ones-complement ,还有所谓的 Twos-Complement 。 Twos-Complement更常见(它在大多数计算机上使用),因为它允许使用与正数相同的算法来添加和减去负数。
通过获取正数的二进制表示并将每个位从1切换为0并从0切换为1来创建二进制补码,然后添加一个
5 0000 0101
4 0000 0100
3 0000 0011
2 0000 0010
1 0000 0001
0 0000 0000
-1 1111 1111
-2 1111 1110
-3 1111 1101
-4 1111 1100
-5 1111 1011
etc.