补充二进制数

时间:2012-01-05 03:56:12

标签: c

当我补充1(~1)时,我得到输出为-2。这是如何在内部完成的?

我首先假设这些位被反转,因此0001变为1110然后加1,所以它变为1111存储,然后检索数字是多少?

2 个答案:

答案 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.