c语言一道选择题,这道题为什么选择b

c语言一道选择题,这道题为什么选择bb是4,=号右边第一个b是4,第二个b也是4,用完后b才是5,可是这里的值还没变,所以答案应该是4+4,我觉得应该是8

b+=b++等同于b=(b+b)++,b=4,++在后面所以最后运算,所以b=4+4+1=9。追问

不对

追答

不是的,解释是错的。你想如果先b++了,那么b就是5了,结果是10。
只能是b先和b对加后为8,此时的b为8,再自加1,为9啊。
等号的优先级非常低,即使是b++的优先级 ,也要比=高的。

追问

请看教材

复合的赋值运算

所以b+=b++等同于b=b+b++

追答

那就按教科书来吧,结果是9。

我运行了一下代码是9。你觉得是8应该是错的。

追问

我也运行了,是9

但为什么呢。

追答

........惊了。b=b+b++,那么b=4,可以看成b=4+4++。
由于+的运算优先级比++高,所以是b=(4+4)++,为9。
我是这么认为的,反正这个++不能省略,给b赋值必须最后运算,不能在++的前面运算。

追问

。。。。惊了,++是自加,用完后值加1

追答

一个意思嘛。。你用完值后+1,是不是4+4后已经用完了嘛,再加1,不是9嘛。
最简单的,int b=4; b=b++; b是不是等于5嘛。
这里b=8++;不是等于9嘛;

追问

给你看看教材啊

你看看注意里的第二条

j=i++后,=号右边的j是5

错了,左边是5

追答

我知道不能是b=8++;只是这里b+b=8和(b+b)++等值啊。
我把我的思路写一下,b=b+b++,进行完加法运算后值为8,这时候b已经用完了,自加符号还没进行,所以程序运行自加,你可以看成 b=8;b++;所以b的值为9。

追问

我懂了!!!

谢谢大神!!!!

跪谢!

追答

嘻嘻加油~~!

温馨提示:答案为网友推荐,仅供参考