我已经运行了这段代码,它将给出输出320,但是我想知道它可以正常工作
#include <stdio.h>
int main()
{
auto int a = 5;
int x ;
x = ~a + a&a+a<<a;
printf("%d",x);
}
答案 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) & b
是b
,对于任何{{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.