精华内容
下载资源
问答
  • 重新翻了遍C语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题。 什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的? 本文将围绕这几个问题展开.....

    重新翻了遍C语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题。

    什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的?

    本文将围绕这几个问题展开..

    (小白文,大神绕道)

    先附录几个自己学习过程中的参考网站。(有些见解和例子来自一下网站)

    http://wenku.baidu.com/link?url=W2ofiBx4yEtrxAAfV8lUaR-bYSIuBox1_DH-1mG6g6q0VeNBR31OfKlaUXRQ6ARQMJEo-r1HVvYBjXVVvtFaSI5CxI4MerOLVxzS3yZRtiS

     http://c.chinaitlab.com/basic/873233.html

     http://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。

     

    差不多就讲这些了。  

    总的来说,掌握上述优先级,结合性是有一定用处的,但也不是必须的。 毕竟,咱们有()这个大招不是,哪里不确定,哪里补()就是了。

     

    学习的路上,与君共勉。

    转载于:https://www.cnblogs.com/yuwei0911/p/7169283.html

    展开全文
  • c语言结合性问题

    千次阅读 2019-04-08 15:41:47
    大多数运算符结合方向是“自左至右”, 即: 先左后右, 例如a- b+c, b 两侧有- 和+两种运算符的优先级相同, 按先左后右结合方向, b 先与减号结合, 执行a- b 的运算, 再执行加c 的运算。 除了自左至右的结合性外, C ...

    C语言运算符优先级
    自行百度即可。
    左结合就是从左到右结合,右结合也同理。
    大多数运算符结合方向是“自左至右”, 即: 先左后右, 例如a- b+c, b 两侧有- 和+两种运算符的优先级相同, 按先左后右结合方向, b 先与减号结合, 执行a- b 的运算, 再执行加c 的运算。

    除了自左至右的结合性外, C 语言有三类运算符参与运算的结合方向是从右至左。即: 单目运算符, 条件运算符, 以及赋值运算符。
    ?:是条件运算符。

    若a 是一个变量, 则++a 或a++和- - a 或a- - 分别称为前置加或后置加运算和前置减或后置减运算, 且++a 或a++等价于a=a+1, - - a 或a- - 等价于a=a- 1, 即都是使该变量的值增加1 或减少1。由此可知, 对一个变量实行前置或后置运算, 其运算结构是相同的, 但当它们与其他运算结合在一个表达式中时, 其运算值就不同了。

    这个是个很头疼的问题。

    值得注意的是, 前置、后置运算只能用于变量, 不能用于常量和表达式, 且结合方向是从右至左。如当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。

    部分来自:https://blog.csdn.net/ugfdfgg/article/details/86747357

    展开全文
  • c语言运算的结合方向一直困扰我,不过我终于get到了哈哈 先附上c语言运算优先级和结合方向图片 以上有c语言一共的15个优先级,从上往下递增 c语言的运算符号有很多,当我们打代码或者看代码的时候符号多了真...

    c语言运算的结合方向一直困扰我,不过我终于get到了哈哈

    先附上c语言运算优先级和结合方向图片

     

    以上有c语言一共的15个优先级,从上往下递增

    c语言的运算符号有很多,当我们打代码或者看代码的时候符号多了真的会搞错,但是当我们仔细研究c运算符时,就会发现还是有规律可寻的呢

    综合上表我做一个概述

    第一步:建议首先确定好成员(比如结构体数组中stu[i].sum即“结构体数组名[i].成员类型(type)”),再看有无括号,有括号先把括号里面的确定算好

    第二步:然后我们要注意单目运算符,单目运算符就是这种运算符只针对一个变量,i++, - (负号), * (指针), & (取址)等,先把单个变量自己的运算算好

    再去想和其他变量的运算啦,所有单目运算符的变量计算我们都要从右到左。例如*p++==*(p++)

    第三步:看双目运算符, 再就是两个变量的运算了,双目运算符从左到右,但是不同的双目运算符优先级不同,所以在看双目运算符中要注意计算的

    先后,这个需要我们记的,记住优先级,还有是从左看到右的。

    在这里想个人解读一下&,| 双目运算符

     按位与 & ,按位 | 我们并不常用,但是不能和逻辑与 &&,逻辑或 || 弄混啦

    & 和 | 在保留和清零某些变量的时候会用到, 

    按位 & 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。

    例如:9&5可写算式如下: 00001001 (9的二进制补码) & 00000101 (5的二进制补码)== 00000001 (1的二进制补码),可见9&5=1。

    按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。

    按位 | 其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

    例如:9|5可写算式如下: 00001001|00000101
    00001101 (十进制为13)可见9|5=13

    按位异或 ^ 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现。

    例如9^5可写成算式如下: 00001001^00000101 == 00001100 (十进制为12)

    第四步:在运算完成了之后就 进入赋值环节啦,赋值运算符是从右到左赋值的。例如:a=b+d+c是先算右边的(b+d+c) 再赋值给a

    基本四步可以完成了,但是如果用逗号运算符的话,需要说明一下 最后一级逗号运算符

    举例说明

    b=2,c=7,d=5 ;

    a1=(++b,c--,d+3);     

    在先计算括号里面的,根据逗号逐个赋值,所以a1最后会等于8。

     a2=++b,c--,d+3; 

    根据优先级可知,先赋值再看逗号,a2=3。

    欢迎大家指正哦*^⊙o⊙^*

    转载于:https://www.cnblogs.com/blogs-192-168-9-222/p/10225661.html

    展开全文
  • 满意答案dtexoy2014.03.14采纳率:48%等级:9已帮助:113人结合性是规定运算符与运算数组合成表达式的结合方向。因为运算符是有优先级别的,表达式的运算应该是先按运算符的优先级由高到低的顺序,结合运算数进行...

    满意答案

    dcebd7a0de6265b6ccae5ead692f1eab.png

    dtexoy

    2014.03.14

    dcebd7a0de6265b6ccae5ead692f1eab.png

    采纳率:48%    等级:9

    已帮助:113人

    结合性是规定运算符与运算数组合成表达式的结合方向。因为运算符是有优先级别的,表达式的运算应该是先按运算符的优先级由高到低的顺序,结合运算数进行计算,当遇到同级别运算符或者是符号一样但运算目数不同时,就要用到运算符的结合性。

    例如:X=-B+C 或 X=A-B+C与X=A-B*C两个表达式计算时是这样的

    对于X=-B+C,表达式运算时是这样的,先数据栈读入X,符号栈读入=(赋值运算符),因为=是双目运算符,还要读入数据,所以继续向后读表达式;又读到-号,不是数据,而且-号的运算级别高于=号,所以-号进入符号栈,继续向后读表达式,读到数据B进入数据栈,这时候-B就符合负号运算符的自右向左结合的单目运算,就进行求值运算,符号栈中-号出栈,与数据栈中B结合成-B,-B就变为一个新的运算数据进入数据栈;后面继续读入+号,它是双目运算符后面还要读入一个运算数据,C就读入了数据栈,后面没有运算符再读入,表达式结束,那么就进行符号栈+号和数据栈中C和-B的值相加,将结果存入数据栈中,符号栈中+出栈;符号栈中还有=号,它和数据栈中的结果与X形成赋值的自右向左双目结合运算,表达式的结果就此运算完毕。

    对于X=A-B+C与X=A-B*C两个表达式计算时,前面X=A-B过程是相同的,只是后面,由于*号比+号的运算级别高,所以表达式X=A-B*C中要先算B*C的结果,在一步一步回退进行A-和X=的运算。而表达式X=A-B+C中+号与-同级别,所以当满足运算条件时就先进行A-B运算,然后进行+C和X=的运算。

    不知道以上的说明,是否能让你明白C语言中运算符结合性和表达式求值的过程。

    00分享举报

    展开全文
  • C语言运算符优先级与结合方向

    千次阅读 2015-07-11 13:57:49
    C语言运算符优先级 详细列表 2008年10月24日 11:58 4,085 次阅读 发表评论 阅读评论 文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。 恩,问这个问题...
  • 1:运算符的结合方向在表达式中,优先级较高的先于优先级较低的进行运算。 而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。 C语言中各运算符的结合性分为两种,即左结合性(自左...
  • C语言的优先性和结合方向

    千次阅读 2009-02-07 18:53:00
    C语言的优先性和结合方向问题C语言的书籍的附录都要说一个问题,就是优先性和结合方向。 我的理解是这些是建立在表达式的基础之上的,写一个c语言的表达式或者看一个C语言的表达式,先看优先性,在优先性相同的情况...
  • 一个类型声明里会出现很多修饰符,他们就像普通的表达式一样,有优先级和结合性。只要掌握了这些规律, 分析一个复杂的指针类型就很容易了。 分析时, 先从变量名开始,然后根据修饰符的优先级结合性,一步一步...
  • C语言运算符的优先级结合方向使用形式等详细列表 精品文档 精品文档 收集于网络如有侵权请联系管理员删除 收集于网络如有侵权请联系管理员删除 精品文档 收集于网络如有侵权请联系管理员删除 优先级 运算符 名称或...
  • C语言运算符优先级 详细列表 文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) ... ...恩,问这个问题的人太多了,懒得继续回答,直接贴上来自己看。...结合方向 说明 1 [] 数
  • 前言:C语言是最为复杂的语言,一些简单的运算看似简单,但是往往比较易错难懂,弄明白运算符的优先级是学习后面很多内容的基础,本文将C语言的的运算符做了一个较为全面的汇总。特别像是指针运算,如果对于运算符的...
  • 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 ) 圆括号 表达式/函数名(形参表) . 成员选择对象 对象.成员名 -> 成员选择指针 对象指针->成员名 2 - 负号运算符 -...
  • 对于学习C语言有很大的帮助,对于一些想学习运算符相关的知识的技术人员很有帮助
  • c语言优先级和结合

    2017-03-30 17:08:00
    C语言的运算符众多,具有不同的优先级和结合性,...结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) ...
  • 结合方向只有三个是从右往左,其余都是从左往右。 所有双目运算符中只有赋值运算符的结合方向是从右往左。 另外两个从右往左结合的运算符也很好记,因为它们很特殊:一个是单目运算符,一个是三目运算符。 C语言中有...
  • C语言还规定了各种运算符的结合方向,众所周知的是,算术运算符的结合方式为“自左向右”,即先左后右,因此b先与减号结合,执行a-b的运算,再执行加c的运算。“自左至右的结合方向”,又称左结合性,即运算对象先与...
  • 网络上已经有前人贴出了所有运算符的优先级和结合顺序,链接如下: 1 http://www.slyar.com/blog/c-operator-priority.html 已经很明了,其实简单归纳下: 就是括号和取值的优先级最高、单目运算第二、...
  • 自左至右的结合方向,称为左结合性。反之,称为右结合性。 结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外, 其它运算符都是左结合性。 (2)表达式求值 1)按运算符的优先级高低...
  • C语言运算符的结合

    千次阅读 2013-08-13 20:23:33
    C 语言与其他高级语言相比, 一个显著的特点就是其运算符特别... 大多数运算符结合方向是“自左至右”, 即: 先左后右, 例如a- b+c, b 两侧有- 和+两种运算符的优先级相同, 按先左后右结合方向, b 先与减号
  • c语言运算符及结合

    2011-12-04 11:38:31
    结合方向  1 ( ) [ ] -> . 圆括号运算符 下标运算符 指向结构体成员运算符 结构体成员运算符 双目运算符 双目运算符 双目运算符 自左至右 2 !
  • 运算符的结合性指同一优先级的运算符在表达式中操作的组织方向, 即: 当一个运算对象两侧运算符的优先级别相同时, 运算对象与运算符的结合顺序, C 语言规定了各种运算符的结合方向( 结合性) 。大多数运算符结合方向是...
  • 目录 运算符优先级和结合性一览表 一些容易出错的优先级问题 ... 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 ..
  • 结合方向       1 () 圆括号       自左至右 [] 下标运算符 -> 指向结构体成员运算符 · 结构体成员运算符                
  • 运算符 C语言中的运算符一共有34种,分10类,... 结合方向 种类 说明 1 [] 数组下标 数组名[常量表达式] 从左到右 特殊运算符 () 圆括号 (表达式)函数名(形参表) ...
  • 结合方向 1 ( ) [ ] -> . 圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 自左至右 2 ! ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 843
精华内容 337
关键字:

c语言结合方向

c语言 订阅