C语言中结合性自右向左怎么理解?

 我来答
刺任芹O
2022-11-16 · TA获得超过6.2万个赞
知道顶级答主
回答量:38.7万
采纳率:99%
帮助的人:8998万
展开全部

C语言中结合性自右向左,简单说就是,从表达式右边开始执行;

1、只有同优先级的运算符才具有结合性“自左至右”或者“自右自左”一说。

2、exp(不同优先级运算符,依据优先级高低进行运算):

int a = 1, b =10, c = 30;

int a = a * b + c;

因为 * 比 + 的运算符优先级高,所以先计算a * b (先计算左边,未考虑结合性),在计算 10 + c,结果是 a = 300

3、c++标准对子表达式进行求值的次序没有做出规定,由各个c++编译器厂商自己决定(参见Bjarne Stroustrup所著的C++程序设计语言)。因此,开发人员不要编写依赖子表达式执行次序的代码,因为为了实现同样的功能,完全可以采用更为清晰的代码。

例如,语句int c=(a++)+(a++)+(a++);中给c赋值的表达式(a++)+(a++)+(a++)的求值。编写的目的是为了提高效率。

4、如果确实想钻研,那么根据Bjarne Stroustrup所说的“子表达式求值次序”,枚举各种可能,就可以理解所有不同结果的编译器行为。例如,上述语句int d=(++b)+(++b)+(++b);可以概念上表示为:int d=E1+E2+E3;(其中,E1,E2,E3是+运算符的同层次表达式,(E1+E2)和E3是+运算符的同层次表达式),其它同层次表达式可以同理)则其计算次序可以是:

1)E1(此时b=2)=>E2(此时b=3)=>E1+E2=b+b=6放入中间变量(此时b=3)=>E3

(此时b=4)=>d=10 对应VC的结果

2)E1(此时b=2)=>E2(此时b=3)=>E3(此时b=4)=>E1+E2=b+b放入中间变量(此时b=4)=>d=12 对应BC的结果;

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式