我在某个地方发现了这个问题而无法理解。请帮帮我。
#include<stdio.h>
int main(){
char x = 250;
int ans = x + !x + ~x + ++x;
printf("%d", ans);
}
输出为-6。我不明白编译器如何执行操作。
提前致谢!
答案 0 :(得分:0)
当你试图理解这样的事情时,将问题分解成小块并查看每个问题通常很有帮助。我修改了你的程序,以便打印每个值:
#include<stdio.h>
int main(){
char x = 250;
printf("x: %d\n", x);
printf("!x: %d\n", !x);
printf("~x: %d\n", ~x);
printf("++x: %d\n", ++x);
int ans = x + !x + ~x + ++x;
printf("ans: %d\n", ans);
}
我运行时获得的输出是:
x: -6
!x: 0
~x: 5
++x: -5
ans: -5
一旦了解了每个部分的含义,就会更容易看出它们如何结合到最终结果中。但是,我的编译器也会发出警告,因为++x
修改了在其他地方使用x
的同一表达式中的x
,并且更改术语的评估顺序将更改最终结果