c语言运算符优先级,结合性(左/右结合详解)

重新翻了遍c语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题。什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的?本文将围绕这几个问题展开..(小白文,大神绕道)先附录几个自己学习过程中的参考网站。(有些见解和例子来自一下网站)http://wenku.baidu.com/link?url=W2ofiBx4yEtrxAAfV8lUaR-bYSIuBox1_DH-1mG6g6q0VeNBR31OfKlaUXRQ6ARQMJEo-r1HVvYBjXVVvtFaSI5CxI4MerOLVxzS3yZRtiShttp://c.chinaitlab.com/basic/873233.htmlhttp://bbs.csdn.net/topics/370153775在讲结合性之前,先提一下c语言的运算符及其优先级关系。C语言运算符优先级优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右--()圆括号(表达式)/函数名(形参表)--.成员选择(对象)对象.成员名--->成员选择(指针)对象指针->成员名--2-负号运算符-表达式右到左单目运算符~按位取反运算符~表达式++自增运算符++变量名/变量名++--自减运算符--变量名/变量名--*取值运算符*指针变量&取地址运算符&变量名!逻辑非运算符!表达式(类型)强制类型转换(数据类型)表达式--sizeof长度运算符sizeof(表达式)--3/除表达式/表达式左到右双目运算符*乘表达式*表达式%余数(取模)整型表达式%整型表达式4+加表达式+表达式左到右双目运算符-减表达式-表达式5<<左移变量<<表达式左到右双目运算符>>右移变量>>表达式6>大于表达式>表达式左到右双目运算符>=大于等于表达式>=表达式<小于表达式<表达式<=小于等于表达式<=表达式7==等于表达式==表达式左到右双目运算符!=不等于表达式!= 表达式8&按位与表达式&表达式左到右双目运算符9^按位异或表达式^表达式左到右双目运算符10|按位或表达式|表达式左到右双目运算符11&&逻辑与表达式&&表达式左到右双目运算符12||逻辑或表达式||表达式左到右双目运算符13?:条件运算符表达式1?表达式2: 表达式3右到左三目运算符14=赋值运算符变量=表达式右到左--/=除后赋值变量/=表达式--*=乘后赋值变量*=表达式--%=取模后赋值变量%=表达式--+=加后赋值变量+=表达式---=减后赋值变量-=表达式--<<=左移后赋值变量<<=表达式-->>=右移后赋值变量>>=表达式--&=按位与后赋值变量&=表达式--^=按位异或后赋值变量^=表达式--|=按位或后赋值变量|=表达式--15,逗号运算符表达式,表达式,…左到右--说明:运算符共分为15级,1级优先级最高,15级优先级最低。同一优先级的运算符,运算次序由结合方向所决定。(结合性:2 13 14 是从右至左 其他都是 从左至右)简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符再详细一点,附带一个口诀。(网上找的)括号成员第一;                //括号运算符[]() 成员运算符. ->全体单目第二;              //所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、&乘除余三,加减四;         //这个"余"是指取余运算即%移位五,关系六;          //移位运算符:<< >> ,关系:> < >= <= 等等于(与)不等排第七;      //即== 和!=位与异或和位或;   "三分天下"八九十;     //这几个都是位运算: 位与(&)异或(^)位或(|)逻辑或跟与;              //逻辑运算符:|| 和 &&十二和十一;           //注意顺序:优先级(||) 底于 优先级(&&)条件高于赋值,                //三目运算符优先级排到13 位只比赋值运算符和","高逗号运算级最低!        //逗号运算符优先级最低如果想详细了解运算符优先级的关系,我想上面的表格和口诀足以了。有了以上的基础,我们回归本篇文章的主题---结合性。观察上述运算符表格我们不难发现,在优先级相同的列表中,有的不止存在一种运算符,那当这两种运算符碰到一起了,该怎么计算呢?又或者,两个相同的运算符在一起,该怎么进行运算呢?要解决这些问题,就必须了解结合性了。C 语言与其他高级语言相比, 一个显著的特点就是其运算符特别丰富, 共有34 种运算符。C 语言将这34 种运算符规定了不同的优先级别和结合性。优先级是用来标识运算符在表达式中的运算顺序的, 在求解表达式的值的时候, 总是先按运算符的优先次序由高到低进行操作, 可是, 当一个运算对象两侧的运算符优先级别相同时, 则按运算符的结合性来确定表达式的运算顺序。运算符的结合性指同一优先级的运算符在表达式中操作的组织方向, 即: 当一个运算对象两侧运算符的优先级别相同时, 运算对象与运算符的结合顺序, C 语言规定了各种运算符的结合方向( 结合性) 。大多数运算符结合方向是“自左至右”, 即: 先左后右, 例如a- b+c, b 两侧有- 和+两种运算符的优先级相同, 按先左后右结合方向, b 先与减号结合, 执行a- b 的运算, 再执行加c 的运算。除了自左至右的结合性外, C 语言有三类运算符参与运算的结合方向是从右至左。即: 单目运算符, 条件运算符, 以及赋值运算符。关于结合性的概念在其他高级语言中是没有的, 这是C语言的特点之一,特别是从右至左结合性容易出错, 下面通过几个具体的运算符来剖析C 语言运算符的结合性。若a 是一个变量, 则++a 或a++和- - a 或a- - 分别称为前置加或后置加运算和前置减或后置减运算, 且++a 或a++等价于a=a+1, - - a 或a- - 等价于a=a- 1, 即都是使该变量的值增加1 或减少1。由此可知, 对一个变量实行前置或后置运算, 其运算结构是相同的, 但当它们与其他运算结合在一个表达式中时, 其运算值就不同了。前置运算是变量的值先加1 或减1, 然后将改变后的变量值参与其他运算, 如x=5; y=8; c=++x*y; 运算后, c 的值是48,x 的值是6,y 的值是8。而后置运算是变量的值先参与有关运算, 然后将变量本身的值加1 减1, 即参加运算的是该变量变化前的值。如x=5; y=8; c=x++*y;运算后, c 的值是40,x 的值是6, y 的值是8。值得注意的是, 前置、后置运算只能用于变量, 不能用于常量和表达式, 且结合方向是从右至左。如当i=6 时, 求- i++的值和i 的值。由于“- ”(负号) “++”为同一个优先级, 故应理解为- (i++), 又因是后置加, 所以先有- i++的值为- 6, 然后i 增值1 为7, 即i=7。讲到这里,大家应该都明白了吧。说白了,许多操作符的优先级都是相同的。这时,操作符的结合性就开始发挥作用了。在表达式中如果有几个优先级相同的操作符,结合性就起仲裁的作用,由它决定哪个操作符先执行。先执行,可以看做是加上括号。比如,右结合(从右到左),那就是,把右边的运算用括号先括起来,再与左边的进行计算,这样自然是先执行右边的了。  比如   int a,b=1,c=2;         a=b=c;  这里'='的结合性是从右到左。 故a=b=c; 可变为a=(b=c);  即a=2。差不多就讲这些了。总的来说,掌握上述优先级,结合性是有一定用处的,但也不是必须的。 毕竟,咱们有()这个大招不是,哪里不确定,哪里补()就是了。学习的路上,与君共勉。

(0)

相关推荐

  • (运算符)乐创DIY C语言讲义​——3.7节(3)

    5.    杂项运算符 C语言中还有几种运算符,我们将之归类为"杂项运算符".这些"杂项运算符"包括三目运算符,sizeof,取变量地址运算符和指向运算符.如图 ...

  • SCL语言基本语法规则:表达式

    SCL:Structured Control Language,结构化控制语言. SCL是一种类似于计算机高级语言的编程方式,只是这种语言编写的程序,可以在PLC中运行.如果学过C语言或者VB语言,就 ...

  • (算术运算符)乐创DIY C语言讲义​——3.7节(1)

    3.7 C语言的运算符 编写一个程序的目的,离不开运算,在C语言中,用于程序运算的操作符被称为运算符.运算符可以完成逻辑运算和算术运算两运算.C语言中的运算符主要由以下几大类: 算术运算符 关系运算符 ...

  • 国二c语言题库选择题答案

    第一部分C基础部分及顺序结构  参考答案及解析 1.[答案]A [解析]C语言被称为"高级语言"是因为它用接近英语国家的自然语言和数学语言作为表达形式,使人们学习和操作起来感到十分 ...

  • (运算符)乐创DIY C语言讲义​——3.7节(2)

    2.    关系运算符 关系运算符是一种逻辑关系运算符,一般用于数值的比较,和我们学习数学时候的大小比较一样,一般两个数值的关系有那么6种:1.等于:2.不等于:3.大于:4.小于:5.大于等于.6小 ...

  • 2.5. 运算符与表达式 |《Python 简明教程 2018》| Python 技术论坛

    运算符与表达式# 通常你所写出的程序语句(逻辑行)会包含若干表达式. 如 2 + 3 即为一个简单的表达式.表达式由运算符与操作数构成. 运算符是一些可以用 + 号或其他关键词符号替代的功能.运算符会 ...

  • 什么是Python表达式?Python基础入门

    初学Python的时候,大家都会接触到各种专业术语,比如说表达式.语句等,那么你知道什么是Python表达式吗?Python表达式由什么构成呢?想要知道,这篇文章你一定要看. Python表达式由什么 ...

  • 【最新视频】第二十九集 C语言运算符优先级

    介绍了C语言中运算符的优先级

  • C语言运算符优先级(超详细)

    转自: http://blog.csdn.net/huangblog/article/details/8271791每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我 ...

  • 左辅星详解

    左辅五行属木,主要代表 多,左辅在哪里,就代表哪里具备多的性质. 古书上说左辅有辅佐的意思,但在大量的紫占与命例中,只有在极小的概率才有辅助的意思. 在应方向的时候,也能应左右. 左辅12在宫位组合 ...

  • 紫微斗数左辅星详解

    作者:紫微行(来自豆瓣) 来源:https://www.douban.com/note/753614460/ 左辅五行属木,主要代表多,左辅在哪里,就代表哪里具备多的性质. 古书上说左辅有辅佐的意思, ...

  • C语言学习篇(15)-----函数传参详解

    https://m.toutiao.com/is/JpuAcLb/ 前面我们已经介绍过什么是指针,指针变量的用法等等,今天我们就来讲讲什么是函数,函数有啥作用,函数的参数有哪些需要注意的地方以及指针与 ...

  • C语言/ 运算符的优先级以及结合方向

    C语言/ 运算符的优先级以及结合方向

  • Python运算符优先级和结合性一览表

    优先级和结合性是Python表达式中比较重要的两个概念,它们决定了先执行表达式中的哪一部分. Python运算符优先级 所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符. 例如对 ...

  • 一年级“左”“右”字写法,掌握技巧很重要,孩子书法飞快提升

    一年级“左”“右”字写法,掌握技巧很重要,孩子书法飞快提升

  • R语言 运算符

    运算符是一个符号,通知编译器执行特定的数学或逻辑操作. R语言具有丰富的内置运算符,并提供以下类型的运算符. 运算符的类型 R语言中拥有如下几种运算符类型: 算术运算符 关系运算符 逻辑运算符 赋值运 ...