c语言(?:)运算符与自加自减运算符优先级问题

#include "stdio.h"
void main()
{
   int a=-1,b=1,c;
   c=++a==b--?a+2:b+3;
   printf("%d",c); 
}

个人推测:
是先算++a==b结果为0赋值给c
然后b--返回0给b
最后输出b+3显示为3

求大佬给个计算流程!!!总感觉自己说的好像不对

 

c=++a==b--?a+2:b+3;

先计算 ++a 对a增加1,返回a增加后的值:0

再计算 b-- 先返回b原本的值:1, 再对b减少 1,b变成0

之后进行 0==1 的比较, 结果为0 (c语言中0表示假)

最后才是三目运算 0?a+2:b+3 0表示假执行 b+3

b是0 结果就是3 

int a=-1,b=1,c;

c=++a==b--?a+2:b+3;

printf("%d",c);

1.单目运算符的优先级高于关系运算符

++a=0,

b-- = 1     特别说明:在比较的时候b的值还是1,但是比较完成后,b的值就是0了,--在后是先比较再减一。

所以返回假,计算b+3

因为前面b--后,值为0了,所以+3的结果是3

详细讲解:https://edu.csdn.net/course/detail/2766

如果有人这样写给我, 我都想给他打成🐷......

请采纳,谢谢!

b先--,a再++,然后a和b进行比较,结果为false(0),此时进行?:运算得到b+3,赋值给c。输出!

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632