2011-02-12 128 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,看看你會得到什麼。

相關問題