C语言中的异常数学运算
我在某个地方发现了这个问题,不明白。请帮我解决这个问题C语言中的异常数学运算,c,C,我在某个地方发现了这个问题,不明白。请帮我解决这个问题 #include<stdio.h> int main(){ char x = 250; int ans = x + !x + ~x + ++x; printf("%d", ans); } #包括 int main(){ 字符x=250; int ans=x+!x+~x+++x; printf(“%d”,ans); } 输出结果是-6。我不明白编译器是如何执行操作的 提前谢谢 当你试
#include<stdio.h>
int main(){
char x = 250;
int ans = x + !x + ~x + ++x;
printf("%d", ans);
}
#包括
int main(){
字符x=250;
int ans=x+!x+~x+++x;
printf(“%d”,ans);
}
输出结果是-6。我不明白编译器是如何执行操作的
提前谢谢 当你试图理解这样的事情时,将问题分解成更小的部分并逐一查看通常是有帮助的。我修改了您的程序,以便它打印每个值:
#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
在其他地方使用x
的同一表达式中修改x
,并且更改术语的求值顺序将更改最终结果。如果char
被签名,请注意,250
超出范围,但可能是-6
。但是没有序列点的++x
会导致未定义的行为。尽管此建议很有用,但您的回答给人的印象是,混合操作描述了已定义的行为。它不会(至少当组合不规则时不会)。
x: -6
!x: 0
~x: 5
++x: -5
ans: -5