int main()
{
int a=1,b;
b=~1;
printf(""%d",b);
return 0;
}
請通過展示位運算解釋將有助於理解......爲什麼1的補-2
在此先感謝.......
int main()
{
int a=1,b;
b=~1;
printf(""%d",b);
return 0;
}
請通過展示位運算解釋將有助於理解......爲什麼1的補-2
在此先感謝.......
這正是你可能想像。 1
爲00000001
二進制(位數取決於您的平臺上的大小int
)。 ~1
執行逐位反轉,即111111110
。在two's complement(最常用的二進制算術系統)中,這等於-2
。
這個身份會幫助你記住的~
行爲:
~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
這裏是正在發生的事情:
1: 00000001
~1: 11111110
如果你想有符號整數, 0:00000000 -1 -1:11111111 -2:11111110
基本上從零開始然後減去2,看看你會得到什麼。
(與* unsigned *操作/打印比較) – 2011-02-12 19:10:16