c语言逗号运算符优先级问题:先执行++?

供稿:hz-xin.com     日期:2025-01-13
在C语言中,逗号运算符的优先级是最低的吗?

一共有十五个优先级:
1 () [] . ->
2 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof
3 * / %
4 + -
5 >> <<
6 > >= < <=
7 == !=
8 &
9 ^
10 |
11 &&
12 ||
13 ?:
14 = += -= *= /= %= |= ^= &= >>= <<=
15 ,
就着多吧 结合性:2 13 14 是从右至左 其他都是 从左至右

括号成员第一; //括号运算符[]() 成员运算符. ->
全体单目第二; //所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、&乘除余三,加减四; //这个"余"是指取余运算即%
移位五,关系六; //移位运算符:> ,关系:> = <= 等
等于(与)不等排第七; //即== 和!=
位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"八九十;
逻辑或跟与; //逻辑运算符:|| 和 &&
十二和十一; //注意顺序:优先级(||) 底于 优先级(&&)
条件高于赋值, //三目运算符优先级排到13 位只比赋值运算符和","高
逗号运算级最低! //逗号运算符优先级最低

C的运算符有以下几类:
1. 算术运算符:* - + /
2.关系运算符: > = <=
3. 逻辑运算符:! && ||
4.位运算符:> ~ | ^ &
5. 赋值运算符:=及扩展赋值运算符
6.条件运算符:?:
7.逗号运算符:,
8. 指针运算符:*和&
9.求字节数运算符:sizeof
10. 强制类型转换运算符:(类型)
11.分量运算符:. ->
12. 下标运算符:[ ]
13.其他:如 函数调用运算符:()
乘号比逗号高
优先级
第一级:
圆括号【()】、 下标运算符【[]】、分量运算符的指向 结构体成员运算符【->】、结构体成员运算符【.】
第二级:
逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++ --】、负号运算符【-】、 类型转换运算符【(类型)】、 指针运算符和取地址运算符【*和&】、长度运算符【sizeof】
第三级:乘法运算符【*】、除法运算符【/】、取余运算符【%】
第四级:加法运算符【+】、减法运算符【-】
第五级:左移动运算符【>】
第六级:关系运算符【 = 】
第七级:等于运算符【==】、不等于运算符【!=】
第八级:按位与运算符【&】
第九级:按位异或运算符【^】
第十级:按位或运算符【|】
第十一级: 逻辑与运算符【&&】
第十二级: 逻辑或运算符【||】
第十三级:条件运算符【?:】
第十四级: 赋值运算符【= += -= *= /= %= >>= <<.= &= |= ^=】
第十五级:逗号运算符【,】
求采纳,不懂的问我

d=0;e=0;

这个式子
d=9+e,e++,e+9;

中,优先级最高的是++,但是,它是后自增,后自增在本句其他计算全部执行完之后才运行,所以先不会执行e++;
此时e仍然是0。

接下来,就是按照逗号表达式d=9+e,e++,e+9;的顺序执行了:①执行第一个表达式d=9+e=9+0=9,把结果9赋值给d,所以得到d是9;②第二个表达式e++,刚才分析过了,这个后自增最后执行,此时什么也不会做
;③e+9=0+9=9,这仅仅是做了一个加法,而且得数(9)都没有保留!
最后,e再自增为1。
所以,输出的结果是:d为9,e为1。
有什么问题请留言。

d=(d=9+e,e++,e+9)
这样的话,用gcc编译器d就是打印10
如果单单是d=9+e,e++,e+9,赋值运算符优先级大于逗号,相当于 (d=9+e),e++,e+9,从左到右算,d=9,e=1,e+9=10,但是这隐藏了一个临时变量 比如x, x=1+9=10,但是你没有接收这个10,于是就被丢掉了,如果像我第一行那样,这个10就会被接收

逗号运算不是这么看的。计算时,从左向右,分别计算每个以逗号分隔开的表达式,最后一个表达式就是这个逗号表达式的最终结果。如d=9+e,e++,e+9 等价于3个式子:
d = 9 + e;
e++;
e+9;
e的初始值是0,所以d = 9 + e = 9 + 0 = 9。e++,所以e = 0++ = 1。至于最后的e+9,是“整个”逗号表达式的值,只不过不影响d和e的最终值

是先执行 d=9+e ,再执行 e++

c语言逗号运算符优先级问题:先执行++?
d=0;e=0;这个式子 d=9+e,e++,e+9;中,优先级最高的是++,但是,它是后自增,后自增在本句其他计算全部执行完之后才运行,所以先不会执行e++;此时e仍然是0。接下来,就是按照逗号表达式d=9+e,e++,e+9;的顺序执行了:①执行第一个表达式d=9+e=9+0=9,把结果9赋值给d,所以得到...

C语言题目,求大神
这道题考的是运算符的优先级问题,括号的优先级最高,先运算括号里的。逗号表达式的优先级是从左到右并且逗号表达式的值等于最右边的式子的值,因此先执行a=3。’++‘的优先级比‘=’高。++a即a先自加1,a=4,然后执行b=a,那么b就是4。然后x就等于括号里逗号表达式的值,就是4。所以答案是...

在c语言中逗号运算符优先级最低是几?
结合次序为从左至右,先执行大括号(。执行a=4*5后,a的值变为20。因为逗号的运算优先级最低,所以执行a*2,但不会改变a的值。再执行大括号),接着执行a+6,得到a的值变为26。先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各...

关于逗号运算符和++的优先级
你的这2个问题不仅牵扯到了操作符的优先级还牵涉到了顺序点的问题,你可以了解下顺序点的概念:顺序点的意思是在一系列步骤中的一个“结算”的点,语言要求这一时刻的求值和副作用全部完成,才能进入下面的部分。从你的例子来说,第一个问题中','的优先级是最低的,它的执行顺序是从左到右,因此y...

C语言逗号表达式的问题 x=6,y=7,z=8 r=func((x--,y--,x+y),z...
首先说明原理:1)逗号运算符也称顺序求值运算符,即从左至右顺序执行,最后一个值会覆盖前面的值,所以使用逗号将几个表达式连接起来的带括号的表达式,最终整个逗号表达式的值为最后一个表达式的值。2)自增和自减运算符有前置和后置之分,在混合运算中,前置是先自增或者自减,再进行取值;而后置恰好...

C语言运算符优先级顺序
c语言运算符优先级从高到低的顺序依次如下:优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。一级运算符:标识,常量,字符串文字量,优先级提升表达式最优先执行。C语言中,运算符的运算优先级共分为15级。1级最高...

C语言运算符优先级
C语言中的运算符运算顺序和结合性是编程中不可忽视的规则。运算符被分为15级,从1级的最高优先级到15级的最低优先级。在表达式中,优先级高的运算符会先于优先级低的运算符执行。如果两侧运算符优先级相同,那么按照规定的结合性进行操作。结合性有两种,左结合性(自左至右)和右结合性(自右至...

y = (x = a + b), (b + c)
逗号运算符的优先级最低 所以 y=(x=a+b),c+d;先执行x=a+b 然后执行y=x c+d没意义 最终y=6 下面一个类似 先执行a=a*2 再执行a+=2;最终a是6

C语言问题,急
逗号运算符。先执行括号内的表达式。a=4*5=20 a*2=40 表达式a=4*5,a*2的值是40,且a的值是20 a+6=20+6=26 逗号运算符,最后一个表达式的值就是整个表达式的值。表达式(a=4*5,a*2),a+6的值是26。

d=(c=a+b,a=4,a++,b=a+1)请问在c语言中输出值a,b,c,d
逗号运算符,其运算顺序由左到右,运算优先级最低,运算结果取最后一个。你这个的话,,运行顺序如下: 假设啊a b c d 的初值分别是1 2 3 4,先运算括号里面,c=a+b(运算后c=1+2=3),再算a=4,(赋值),再运行a++(a++为先使用后加1,故这条语句结束之后a=2),再运行b=a+1(...