2915658109 发表于 2020-9-24 21:26:26

C语言运算符优先级赋值问题

x=5;
y=(x=2)+x;
y=4
情况2
x=5;
y=(x=2)+(x=3);
y=6
情况3
x=5
y=(x=2)+(x=3)+(x=6);
y=12
情况4
x=5
y=(x=2)+(x=3)+x*(x=6);
y=42
情况4
x=5
y=(x=2)+(x=3)+x+(x=6);
y=15
情况1 2X的值取决于最后一次赋值情况3第三个X=6为啥单独赋值了 情况4和5是不是代表先运算那边就赋值 来个大佬帮忙讲解下

2915658109 发表于 2020-9-24 21:48:55

有木有大佬啊

sunrise085 发表于 2020-9-24 21:56:18

本帖最后由 sunrise085 于 2020-9-24 21:57 编辑

从左向右运算,多个加号的时候,是逐个运算的。先理解第一个,理解了之后再逐个向后看,这几种情况有点递进的关系
情况一:赋值等号右侧有一个加号,就先获得加号两侧的表达式的结果,从左向右,先是x=2,然后是x,所以最终结果为2+2=4
情况二、一个加号,从左向右先是x=2,然后是x=3,最后计算x+x,即3+3=6
情况三:两个加号先算前一个加号,从左向右,和情况二一样,得到6,然后算第二个加号:6+(x=6)得到的是6+6=12
情况四:两个加号一个乘号,先算第一个加号,得到3+3=6,然后算后边的乘号,得到6*6=36,最后6+36=42
情况五:三个加号,先算第一个加号,3+3=6,再算第二个加号6+3=9,最后算第三个加号9+6=15

风过无痕1989 发表于 2020-9-24 22:41:38

各种情况,都有三种运算符,分别是:()、+、=。优先级也按 ()、+、= 这个顺序,前两个的结合性是从左至右,赋值运算符的结合性是从右至左。同一优先级的情况下,赋值以最后一次为准。

其运算逻辑,3楼已经给你讲解的很清楚,很详细了。我仅仅作个补充,完成今天的回复得荣誉加分
页: [1]
查看完整版本: C语言运算符优先级赋值问题