2011-02-12 86 views
-1
int main() 
{ 
     int a=1,b; 
     b=~1; 
     printf(""%d",b); 
     return 0; 
} 

请通过展示位运算解释将有助于理解......为什么1的补-2

在此先感谢.......

+0

(与* unsigned *操作/打印比较) – 2011-02-12 19:10:16

回答

8

这正是你可能想像。 100000001二进制(位数取决于您的平台上的大小int)。 ~1执行逐位反转,即111111110。在two's complement(最常用的二进制算术系统)中,这等于-2

3

这个身份会帮助你记住的~行为:

~x == -x - 1 

将其应用于1:

~1 == -1 - 1 
    == -2 

在位:

1 == ...0000000001 
~1 == ...1111111110 # flip the bits 

0 == ...0000000000 
-1 == ...1111111111 # two's complement representation for negative numbers 
-2 == ...1111111110 
0

这里是正在发生的事情:

1: 00000001 
~1: 11111110 

如果你想有符号整数, 0:00000000 -1 -1:11111111 -2:11111110

基本上从零开始然后减去2,看看你会得到什么。