右结合性,就是在表达式中最右边的操作最先执行,然后从右到左依次执行
左结合性的操作符(如位操作符“&”和“|”)则是从左至右依次执行
在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个。
每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。例如,在表达式a*b+c中,乘法运算的优先级高于加法运算符的优先级,所以先执行乘法a*b,而不是加法b+c。
但是,许多操作符的优先级都是相同的。这时,操作符的结合性就开始发挥作用了。在表达式中如果有几个优先级相同的操作符,结合性就起仲裁的作用,由它决定哪个操作符先执行。像下面这个表达式:
int a,b=1,c=2;
a=b=c;
我们发现,这个表达式只有赋值符,这样优秀级就无法帮助我们决定哪个操作先执行,是先执行b=c呢?还是先执行a=b。如果按前者,a=结果为2,如果按后者,a的结果为1。
所有的赋值符(包括复合赋值)都具有右结合性,就是在表达式中最右边的操作最先执行,然后从右到左依次执行。这样,c先赋值给b,然后b在赋值给a,最终a的值是2。类似地,具有左结合性的操作符(如位操作符“&”和“|”)则是从左至右依次执行。
结合性只用于表达式中出现两个以上相同优先级的操作符的情况,用于消除歧义。事实上你会注意到所有优先级相同的操作符,它们的结合性也相同。这是必须如此的,否则结合性依然无法消除歧义,如果在计算表达式的值时需要考虑结合性,那么最好把这个表达式一分为二或者使用括号。
例:
a=b+c+d
=是右结合的,所以先计算(b+c+d),然后再赋值给a
+是左结合的,所以先计算(b+c),然后再计算(b+c)+d
C语言中具有右结合性的运算符包括所有单目运算符以及赋值运算符(=)和条件运算符。其它都是左结合性。
在C语言中有少数运算符在C语言标准中是有规定表达式求值的顺序的:
1:&& 和 || 规定从左到右求值,并且在能确定整个表达式的值的时候就会停止,也就是常说的短路。
2:条件表达式的求值顺序是这样规定的:
test ? exp1 : exp2;
条件测试部分test非零,表达式exp1被求值,否则表达式exp2被求值,并且保证exp1和exp2两者之中只有一个被求值。
3:逗号运算符的求值顺序是从左到右顺序求值,并且整个表达式的值等于最后一个表达式的值,注意逗号','还可以作为函数参数的分隔符,变量定义的分隔符等,这时候表达式的求值顺序是没有规定的!
判断表达式计算顺序时,先按优先级高的先计算,优先级低的后计算,当优先级相同时再按结合性,或从左至右顺序计算,或从右至左顺序计算。

c/c++中 运算符 左结合与右结合相关推荐

  1. 理解C和C++中的左值和右值

    翻译至https://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c/ C/C++编程中不是 ...

  2. Oracle中的左连接与右连接

    Oracle中的左连接与右连接 在Oracle PL-SQL中,左连接和右连接以如下方式来实现 查看如下语句: SELECT emp_name, dept_name  FORM Employee, D ...

  3. 详解C++中地左值、右值和移动

    左值持久,右值短暂 C++ primer中提到过:当一个对象被用作右值时用的是对象的值(内容),当对象被用做左值时用的是对象的身份(在内存中的位置) [ p r i m e r ] ^{[primer ...

  4. C++中的左值和右值

    左右值的概念 C++中左值(lvalue)和右值(rvalue)在C++11后变得尤为重要,是理解 move.forward等新语义的基础. 左值和右值这两个概念是从C中传承过来的. 左值指的是:既能 ...

  5. C++ 中的左值和右值

    C++ 中的左值和右值 简介 <C++ Primer>中左值和右值的描述如下: C++ 的表达式要不然是右值(rvalue,读作"are-value"),要不然就是左值 ...

  6. 简单聊聊C/C++中的左值和右值

    文章目录 前言 问题 历史渊源 认识左值和右值 具体的示例 最简单的赋值语句 自增自减运算 前置自增 后置自增 自增表达式赋值 函数表达式 总结 前言 为什么标题要写成简单聊聊,而不是写成什么&quo ...

  7. c++中的左值与右值

    转载自 http://www.cnblogs.com/catch/p/3500678.html 左值 (lvalue)和右值 (rvalue) 是 c/c++ 中一个比较晦涩基础的概念,有的人可能甚至 ...

  8. c 表达式必须是可修改的左值_C++中的左值,右值,左值引用,右值引用

    童帅 2020-2-22 文中的"表达式"都是指赋值表达式 左值,右值,左值引用,右值引用 到底是什么 左值和右值 int a = 10; int b = 5; int c = a ...

  9. [c++]-c++中的左值和右值、左值引用和右值引用、万能引用和引用折叠及完美转发

    1.左值和右值 1.1左值和右值定义 在c++中,左值是一个指向内存的东西,换句话来讲,左值有地址,保存在内存中,右值则为不指向任何地方东西,即不在内存中占有确定位置.一般来说,右值是暂时和短暂的,而 ...

最新文章

  1. iOS开发-Certificates、Identifiers和Profiles详解
  2. php注册树模式,php基础设计模式大全(注册树模式、工厂模式、单列模式)
  3. 通俗理解T检验与F检验的区别【转】
  4. revit如何根据坐标进行画线_铭成教你如何根据同步带的齿形进行选型
  5. 循环内部异步函数处理相关问题解析
  6. 英语口语-文章朗读Week10 Thursday
  7. 使用mysql悲观锁解决并发问题
  8. 图像 - 灰度化、灰度反转、二值化
  9. python 科研统计_Python科研统计作图Plotnine+Seaborn+matplotlib替代R ggplot2系列!(二)...
  10. DPDK - 使用 cmake 构建l2fwd多平台编译系统
  11. 新浪股票数据接口获取
  12. 2022新版UI聚合支付系统四方系统源码+修复漏洞完美版
  13. 教你:找回已失效的B站视频+批量下载B站收藏夹视频
  14. 透过招股书看知乎的价值投资逻辑
  15. 关于CPU 和 GPU
  16. Python代码写好了怎么运行?为大家详细讲讲如何运行Python代码
  17. Visual Studio2022安装教程
  18. windows 自带计算器介绍
  19. 深度长文:智能手机的社会学研究
  20. sim300的一些知识点

热门文章

  1. jQuery 流星雨特效
  2. 13 | 关于写简历,必须要注意的一些细节
  3. SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to
  4. Redis底层数据结构介绍
  5. android订单管理系统源码,生鲜o2o配送开源系统,包括Android源码+SSH后台管理系统...
  6. Win10双显示器显示设置与输入信号超出范围解决方法
  7. 2021-03-14我的博客
  8. 跟锦数学2017年上半年
  9. 如何写好一个标题?十分钟教你写出优质标题
  10. LCCUP 力扣杯2020秋季编程大赛题解