a为int类型,且其值为3,a+=a-=a*a 跑完等于 -3

问题描述:

a为int类型,且其值为3,a+=a-=a*a 跑完等于 -3
 先进行a-=a*a    a=a-a*a          a=-6
此时a=-6
a+=a
a=a+a=-12

我知道应该是这样算,我以前也是这么认为的,不过我跑了之后结果是-3

是不是等于-3,为什么不是等于-12啊.
1个回答 分类:综合 2014-11-10

问题解答:

我来补答
你说的只是你的理解,而不是C语言.
C语言的赋值语句并没有说明发生效果的时机.
你认为执行完a-=a*a之后,a的值就应该是-6了,但是这是你的理解.
因为a=3,所以可以在一开始就把算式改写成:
a=3-(3*3)
a=3+(3-3*3);
显然无论哪种方式,a都可以获得确定的值.
实际上你只要记住,赋值语句的级别很低,C语言的编译器一般优先关注表达式的值,而不是赋值语句.
再问: 那就是说这编译器的问题了?答案到底应该订-12呢还是-3呢。
 
 
展开全文阅读
剩余:2000