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



我已经运行了这段代码,它会给出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.

相关内容

  • 没有找到相关文章

最新更新