输出a = ~a + 2<< 1;

时间:2014-03-29 20:57:40

标签: c output operator-precedence

请帮助理解以下c程序声明的输出。

            a = ~a + 2 << 1 ;

            printf("Value of A is %d",a);

A的值为-2。

1 个答案:

答案 0 :(得分:4)

我假设a是一个有符号的int并初始化为2.我也假设这是两个补码。 (我也省略了第一个字节上方的字节,因为它们对这个答案的结果没有意义。)

〜(代字号)是按位非运算符。也就是说,它会将任何1变为0,将任何0变为1.&lt;&lt;有点转向左操作。

所以在开始时我们将00000010作为a中的位。当我们执行not运算符时,我们得到11111101,这将给出数字-3。

然后我们加2,所以我们得到11111111或-1。然后我们将这个位移到左边,我们有11111110,它等于-2。