大佬们遇到过这个问题吗? C语言运算符优先级问题

大佬,求助..碰到个C语言优先级问题题目:请问X的值是多少?
#include
intmain()
{
intx=6;
x+=x-=x*x;
printf("%d\n",x);
}
答案是"-60",请问为什么是-60?不是+=比-=优先级高吗?
缥缈止盈
浏览 337回答 2
2回答

天涯尽头无女友

在C里,这是一个未定义行为。x+=x-=x*x;^^121处对x值的读取与2处对x值的写入无关,而两者之间没有序列点(sequencepoint)分隔。因而这是一个未定义行为。在C++里,直到C++17明确了赋值与语句之间各个操作数之间的求值顺序。在此之前,这也是一个未定义行为。=====================未定义行为,什么都可能发生=====================+=与-=是同优先级的,右结合,因而i+=j-=k*l;相当于i+=(j-=(k*l))。=====================在C++里,自C++17开始,(复合)赋值运算符的右操作数先于(sequencebefore)左操作数。(C++已经不用序列点的概念了)所以,x+=x-=x*x的计算顺序为:1先计算:x-=x*x1.1-计算x*x(结果36)1.2-计算2处的x(结果6)1.3-计算x-=x*x(结果-30),并赋值(此后x==-30)2计算1处的x(结果-30)(x值已经修改)3计算x+=x-=x*x(结果-60),并赋值(此后x==-60)=======================在C中,与C++17之前,1.3处的赋值与2中的x的值的读取顺序是不确定的。

HUWWW

和优先级无关,就是简单的从右往左执行,拆分一下:x-=x*x得到-30x+=x得到-60最后声明,常规业务代码不要这么写
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript