我已经运行了这段代码,它将给输出320我想知道这段代码是如何工作的

时间:2018-08-06 13:32:11

标签: c

我已经运行了这段代码,它将给出输出320,但是我想知道它可以正常工作

#include <stdio.h>  
int main()
{
  auto int a  = 5;
   int x ; 
    x = ~a + a&a+a<<a;
    printf("%d",x);
 }

3 个答案:

答案 0 :(得分:3)

使用C运算符优先级表,您可以将该表达式分成带括号的小段。

x = ~a + a&a+a<<a;
// Is equivalent to:
x = ((~a) + a) & ((a + a) << a);

答案 1 :(得分:3)

表达式分组为

(~a + a) & ((a + a) << a)

由于运算符的优先级。 在2的补码系统中(~a + a)-1,所有位都设置为1。因此,(~a + a) & bb,对于任何{{1} }。因此表达式简化为

b

这是10 << 5,即320。

答案 2 :(得分:-1)

 x = ~a + a&a+a<<a;
 x = ((~a) + a) & ((a + a) << a);//Using a C operator precedence table
 x = (-6 + 5 ) & ( 10 << 5);
 x = (-1) & (10 * 32);
 x = (-1) & (320);
 x = 320;// bitwise AND between -1 and a number always gives that number as a result.