C中的异常数学运算

时间:2017-03-21 18:30:32

标签: c

我在某个地方发现了这个问题而无法理解。请帮帮我。

#include<stdio.h>

    int main(){

    char x = 250;

    int ans = x + !x + ~x + ++x;

    printf("%d", ans);


}

输出为-6。我不明白编译器如何执行操作。

提前致谢!

1 个答案:

答案 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,并且更改术语的评估顺序将更改最终结果