复合运算符计算 a+=a*=a⼀=a-6 怎么展开?

2024-11-15 17:44:08
推荐回答(5个)
回答1:

-的优先级较高,+=、*=、/=的优先级相等,较低,而且是右结合的。所以等效语句如下:

a = a / (a - 6);
a = a * a;
a = a + a;

在gcc下输入10,结果是8,与上面的代码相符,VC2008下也是8。
-------------------------------------------------------------
PS:如果a是int的话每次都要向下取整

第一次a = a / (a - 6) = 10 / 4 = (int)2.5 = 2
第二次a = a * a = 2 * 2 = 4
第三次a = a + a = 8

如果是float或者double就没这个步骤了

回答2:

先算a/=a-6,9-6=3,a被赋值9/3=3
接下来a*=a,也就是a=a*a,注意a已经改变为3了,所以a被赋值为9
最后a+=a,也就是a=a+a,此时a被赋值为9+9=18

回答3:

楼主是这样
你补充问题中所述是“a=10/(10-6)=5/2 然后 10*5/2=25 然后10+25=35”
但貌似是这样
a=a/(a-6)=2.5 程序取整数 所以a的结果为2
a=a*a是a=2*2结果为4 不是10*之后的结果
a=a+a是a=4+4结果为8不是10+之后的结果

回答4:

依次是a1=a/(a-6)
a2=a*a1
a=a+a2

回答5:

a/= (a-6) -> a/(a-6)
a*= a/(a-6) -> a²/(a-6)²
a+= a²/(a-6)² ->2a²/2(a-6)²