设有定义int a=6;则执行表达式a+=a-=a*a++后,a的值是多少?为什么?

2024-11-27 18:35:03
推荐回答(3个)
回答1:

这是编程里面的,要从右向左看,意思是将等号右边的计算结果赋值给等号左边的变量(本题中等号左边的变量即为a),可以拆分成三个式子:
1. a-=a*a;
2.a++
3. a+=之前的结果;
+=、-=这两个符号好像是为了节约内存什么的而设计的,上面两个式子的真实意思为:
1. a=a-(a*a)=6-6*6=-30;
2. a++ a=-29
3. a+=-30
a=-29-30=-59

回答2:

a++等于6,执行后a等于7;
a*a++等于7*6=42;
a-=a*a++即a=a-42,即a=7-42=-35;

即a+=a,即a=a+a=-35+-35=-70;

回答3:

a+=a-=a*a++;
按照一般的优先级和结合型理论,可以这样分解
a += (a -= (a*a++)); //
不过,至少在C/C++中, 子表达式的求值顺序是不确定的,在不同的编译器
下可能不同。
即使编译后计算出来是 -59,也是针对特定编译器而言的,
在子表达式 a -= a * a++ 中,是 -= 左边 a 先求值还是 子表达式 (a * a++) 先求值,
这是不确定的,随不同编译器而不同。如果 a 先求值,最终结果是-59,如果 a++先求值呢?结果肯定不同。
类似的问题不知道在百度上提了多少次啦。
在写代码时,有经验的人都避免在一个表达式中对一个变量做很多次修改。