精华内容
下载资源
问答
  • C++运算符结合性(左结合,右结合
    千次阅读
    2018-11-22 01:35:15

    决定表达式计算顺序时,先看运算符优先级,优先级高的先计算。
    优先级相同时才考虑结合性。
    优先级相同的运算符的结合性必须一致。

    【右结合举例】
    =号为例:
    a=b=c
    先计算等号右侧的,等价于:
    a=(b=c)

    【*++p,++*p,*p++】
    运算符优先级:
    后自增>*(解引用)
    *(解引用) = 前自增
    *++p:
    (解引用) = 前自增 考虑结合性,是右结合,所以相当于*(++p);
    ++*p
    (解引用) = 前自增 考虑结合性,是右结合,所以相当于++(*p);
    *p++
    后自增>*(解引用) 不考虑结合性。相当于*(p++);

    更多相关内容
  • c语言的左结合性与右结合性

    万次阅读 多人点赞 2017-11-27 21:39:35
    结合性,就是在表达式中最右边的操作最先执行,然后从右到左依次执行 左结合性的操作符(如位操作符“&”和“|”)则是从左至右依次执行 在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。一个...

    右结合性,就是在表达式中最右边的操作最先执行,然后从右到左依次执行
    左结合性的操作符(如位操作符“&”和“|”)则是从左至右依次执行
    在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个。
    每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。例如,在表达式ab+c中,乘法运算的优先级高于加法运算符的优先级,所以先执行乘法ab,而不是加法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语言运算符的结合性

    千次阅读 多人点赞 2019-10-01 22:15:56
    在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的...每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。例如,在表达式a*b+c...

    http://blog.chinaunix.net/uid-1924596-id-3049989.html

    在标准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语言运算符结合性有必要提一下,毕竟去年我自己刚学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。


    差不多就讲这些了。  

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

    展开全文
  • 在表达式中,各运算对象参与运算的先后顺序不仅要遵守运算符优先级的规定,还有运算符结合性的制约,以便确定运算对象的执行顺序。这种结合性是其他语言没有的。各种运算符的优先级从高到低的顺序如图5.1所示。 以上...
  • 运算符和结合性

    千次阅读 2017-11-17 10:46:08
    第一级:结合方向自左向右, () [] :只用于数组,作用:1.定义数组,先定义后使用;2.通过数组下标访问数组元素。int a=10;int arr[10]; . : 自定义数据类型 ,通过结构体的变量访问内部成员;  struct ...
  • 结合性

    千次阅读 2016-07-05 15:14:53
    :才会体现出它的右结合性,即a?b:c?d:e中,根据右结合性可知应理解为a?b:(c?d:e)。显然,上述问题中是体现不出这种结合性来的。 在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。一个满分的...
  • 运算符结合性

    千次阅读 2015-02-03 17:22:56
    ...在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。一个满分的回答是:它是... 每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间
  • 考研408是什么意思

    千次阅读 2021-06-23 10:59:11
    那相信大家也发现现在越来越多的学校专业课采用了408,那么考研408是什么意思呢?一起来看看吧~更多考研专硕复习资料、考研专硕试题、考研专硕复习策略等信息,请您关注浙江考研专硕备考。考研408的意思就是你考研要...
  • &&在C语言中是什么意思

    千次阅读 2021-05-21 17:44:50
    推荐教程: 《c语言教程》 以上就是&&在C语言中是什么意思的详细内容,更多请关注php中文网其它相关文章! 声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理 相关...
  • 而a+b+c则需要进行结合性考虑了,如果+为左结合性,那么应该理解为:(a+b)+c,如果+为右结合性,那么应该理解为a+(b+c),当然了,我们已经知道+为左结合性了。  对于?:,在C中与它优先级相同的只有它自己,因此...
  • 如何理解C语言的左结合 和右结合性

    千次阅读 2013-07-12 10:18:00
    如何理解C语言的左结合 和右结合性结合就是如果连续两个同一优先级的运算符号挨着,那么相当于右边的一个加括号。 比如这里 相当于右边一个 ?: 加括号或者 a= b= c 这里相当于 a = (b=c) 右边一个...
  • air flow空调滤芯上是什么意思

    千次阅读 2021-02-06 12:03:35
    air flow的意思是空气流向,这个标志是帮助安装的技师区分正反面的,如果装反了,那空调滤芯是无法起到过滤空气的作用的。汽车上都是有空调滤芯的,空调滤芯可以过滤空气保持车内空气的洁净。汽车空调是汽车上一个...
  • "<<"是什么意思

    千次阅读 2021-05-21 05:32:34
    这里并不是等于的意思,只是赋值,等于用‘==’表示。注意:赋值语句左边的变量在程序的其他地方必须要声明。得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为她它们...
  • 结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的...
  • airflow空调滤芯上是什么意思

    千次阅读 2020-12-19 23:21:18
    air flow的意思是空气流向,这一标记符号是帮助安装的技师区分正反面的,假如装反了,那空调滤芯是无法起到过滤空气的作用的。汽车上基本都是有空调滤芯的,空调滤芯可以过滤空气维持车里面空气的清洁。汽车空调是...
  • C语言中if(!a)表示什么意思

    千次阅读 2021-05-23 04:03:20
    if简单的来说就是条件判断语句,如果什么,那么就执行;if-else如什么果,否则就执行else。if语句的简单形式if(表达式){语句组}else{语句组},表达式就是判断的条件。看在你给的(!a),主要就是在逻辑...
  • 科普:考研408是什么意思

    万次阅读 2021-06-23 10:58:06
    原标题:科普:考研408是什么意思如今计算机考研的热度越来越高,相信2021考研也有不少同学会选择计算机考研。那相信大家也发现现在越来越多的学校专业课采用了408,那么考研408是什么意思呢?一起来看看吧~考研408...
  • 试剂盒REF与LOT分别是什么意思

    万次阅读 2021-01-12 11:33:05
    使用时根据实验需要购买专用提取试剂盒, 不是专用试剂盒,提出RNA,不能确保其质量以及完整,会影响RT-PCR、Northern blot、Dot blot、Real time RT PCR、芯片分析、polyA 筛选、体外翻译、RNase 保护分析、分子...
  • c语言中case是什么意思是程序的入口,一般结合switch使用 举个例子: int a=2; switch(a){ case 1:prinf("1");break; case 2:prinf("2");break; default:prinf("3"); } 就表示根据a的值进行判断,a的值与 case后面的...
  • 这些奇奇怪怪的英文符号,究竟代表着什么意思呢?“G”G是GPRS的缩写,是GSM移动电话用户可用的一种网络制式,代表当前手机数据网络用的是第二代移动通信数据传输技术,介于2G和3G之间,传输速度最快只有114kb/s,在...
  • data是什么意思

    千次阅读 2021-05-19 10:47:40
    编程语言中文网今天精心准备的是《data是什么意思》,下面是详解!手机里的data是什么意思一、Data,中文释义:数据,数据资料。Data文件夹,是系统及程序的数据存放文件夹,比如软件的设置和安装包等。二、Data...
  • c/c++中 运算符 左结合与右结合

    千次阅读 2020-09-07 13:04:10
    结合性,就是在表达式中最右边的操作最先执行,然后从右到左依次执行 左结合性的操作符(如位操作符“&”和“|”)则是从左至右依次执行 在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。一...
  • RAM和ROM分别是什么意思

    千次阅读 2021-08-02 09:50:51
    英特尔的Pentium III Coppermine CPU中结合有256KB的全速二级缓存,这实际上就是一种SRAM。非常不幸得就是 此种SRAM与其"伙伴"DRAM相比非常地昂贵,因此在CPU内只能使用少量的SRAM,以降低处理器的生产成本;不过由于...
  • 两个相邻操作符的执行顺序由它们的优先级决定。例如: a + b*c,在这个表达式中,乘法和加法操作符是两个相邻...例如:a + b + c,由于 + 操作符的结合性是由左到右(L-R),所以先计算a+b,然后计算(a+b)+c。 除...
  • java运算符的结合性和优先级

    千次阅读 2013-02-18 08:33:43
     java运算符的结合性  所有的数学运算符都认为是从左到右运算的,java语言中大部分运算符也是从左到右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 225,316
精华内容 90,126
关键字:

性结合处什么意思