我已经运行了这段代码,它会给出320的输出,但我想知道它能在中工作
#include <stdio.h>
int main()
{
auto int a = 5;
int x ;
x = ~a + a&a+a<<a;
printf("%d",x);
}
使用C运算符优先级表,可以用括号将该表达式分解成更小的部分。
x = ~a + a&a+a<<a;
// Is equivalent to:
x = ((~a) + a) & ((a + a) << a);
表达式分组为
(~a + a) & ((a + a) << a)
由于操作员的优先级在2的补码系统中,(~a + a)
是所有位都设置为1的-1
。因此,对于任何b
,(~a + a) & b
都是b
。因此表达式简化为
(a + a) << a;
这是10<lt;5,其为320。
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.