我在这个程序中对x = 320 ...
的值感到困惑#include<stdio.h>
int a=5;
int main(){
int x;
x=~a+a&a+a<<a;
printf("%d",x);
return 0;
}
希望得到快速和积极的回应..
答案 0 :(得分:8)
评估如下:
x = ((~a) + a) & ((a + a) << a);
您应该查看C运算符优先级表。
答案 1 :(得分:8)
实际上,如果你的实现对整数使用二进制补码编码,那么只会给你320。原因是因为它被解释为:
(((~a) + a) & ((a + a) << a))
= -1 & (10 << 5)
= 10 << 5
= 320
二进制补码中的-1都是1位,所以当你and
得到任何东西时,你得到相同的值。
然而,使用一个补码,~a + a
将给出零,以便最终结果为零。
ISO C标准允许对有符号整数进行二次补码,一次补码和符号/幅度编码,这就是为什么这些代码本来就不好的原因之一。
答案 2 :(得分:1)
答案 3 :(得分:-1)
代码使用以下运算符(按等式中显示的顺序列出):
给定operator precedence table for the C languages,将按以下顺序评估运算符:
鉴于此,我们有以下步骤:
这给出了最终值320。