您好、欢迎来到现金彩票网!
当前位置:秒速牛牛 > 条件运算符 >

C语言中 怎样理解三目运算符(条件运算符)的右结合性??

发布时间:2019-05-26 21:37 来源:未知 编辑:admin

  当然是先判断--a 是否等于 b++ ,然后决定执行后面的哪个表达式。但是它的又结合性体系那在哪里呢??

  还有一个问题:为什么不把这个表达式中所有的自加自减运算先执行完,然后再执行条件判断呢??展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  结合性只有在相同优先级的运算符间才起作用,比如a+b*c,+与*优先级不同,这里根本不用去管结合性。而a+b+c则需要进行结合性考虑了,如果+为左结合性,那么应该理解为:(a+b)+c,如果+为右结合性,那么应该理解为a+(b+c),当然了,我们已经知道+为左结合性了。

  对于?:,在C中与它优先级相同的只有它自己,因此只有连续的?:才会体现出它的右结合性,即a?b:c?d:e中,根据右结合性可知应理解为a?b:(c?d:e)。显然,上述问题中是体现不出这种结合性来的。

  再者,还有一个求值顺序的问题,a?b:c中,C语言规定先对a求值,非零则对b求值并作为该表达式的值,为零则对c求值并作为表达式的值,并且b和c中有且仅有一个会被求值。对于题目中的就应该是:先进行(--a == b++)的求值,根据是否为零,会对(a++)或(b++)进行求值。说白了,也就是只有两种可能性:可能性1:先算(--a == b++),再算(a++);可能性2:先算(--a == b++),再算(b++)。至于(--a == b++)中到底是先算--a 还是b++则仅从C语言这个角度是无法判别的,这是个实现问题,如果要想写出健壮的可移植的代码就应该避免这种表述。

  展开全部右结合性是运算符的一种性质。对于某一个中缀运算符OP,如果 a OP b OP c 等价于 a OP ( b OP c) 就可以说运算符具有右结合性。

  对于C语言的条件运算符 a?b:c 而言,判断优先级和结合性的时候,中间的表达式 b 不纳入判断。C语言的条件运算符具有这样的性质: a ? b : c ? d : e 等价于 a ? b : (c ? d : e),因此一些人说C语言的条件运算符具有右结合性

http://scare666.com/tiaojianyunsuanfu/91.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有