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