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

请通过显示按位运算来解释这将有助于理解......

提前致谢.......

4

3 回答 3

8

这正是你可能想象的。 100000001二进制的(位数取决于int您平台上的大小)。 ~1执行按位反转,即111111110. 在二进制补码(最常见的二进制算术系统)中,这等于-2.

于 2011-02-12T19:09:00.120 回答
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
于 2011-02-12T19:10:04.013 回答
0

这是正在发生的事情:

 1:  00000001
~1:  11111110

如果你考虑一个有符号整数,0:00000000 -1 -1:11111111 -2:11111110

基本上,从零开始减去两个,看看你得到了什么。

于 2011-02-12T19:10:05.507 回答