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

2021-03-02 08:18:01 字数 1508 阅读 3032

1楼:夙波保熙星

?:的优先级比=高。b=a/b两边加上括号。

2楼:匿名用户

int x;

printf("qingshuruchengji --score\n");

scanf("%d",&x);

if(x>=90)

else if(80

else if(60

else

3楼:我吃肉吃我

#include

int main()

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

4楼:

这里涉及了c中的优先级、结合性、求值顺序。

结合性只有在相同优先级的运算符间才起作用,比如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语言这个角度是无法判别的,这是个实现问题,如果要想写出健壮的可移植的**就应该避免这种表述。

总结一下,就是先看优先级,次看结合性,有的求值有序,有的则无序。

5楼:匿名用户

右结合性是运算符的一种性质。对于某一个中缀运算符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语言的条件运算符具有右结合性

6楼:匿名用户

实际上,一条语句中出现多次同一个变量的自增或自减是不合规范的,因为这种写法出现的结果是不确定的,根据编译器而定。a++表示语句执行后a = a + 1,到底有多后?有2个a++怎么办?

这都是编译器内部机制的问题。真正好的程序员是避免这种情况的。

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

1楼 匿名用户 c语言中 逗号运算符和条件运算符还有单目运算符是有结合性的,逗号运算符左结合性条件运算符右结合性单目运算符 正 负 右结合性 c语言中怎样理解三目运算符 条件运算符 的右结合性 2楼 匿名用户 右结合性是运算符的一种性质。对于某一个中缀运算符op,如果 a op b op c 等价于...

有关C语言运算符右结合性的问题,C语言右结合性的运算符?

1楼 西平司马 1 是2 是 3 不是,是从左到右计算。因为 和 是相同优先级的,所以如果 在 的左边出现,那么应该先计算所有 运算 这里遵循最右原则 ,在计算右边的 运算。 2楼 匿名用户 不同的编译器有不同的解释,用的时候加上括号就行了 3楼 大赫慈雅容 c语言中右结合的运算符有 1 逻辑非运算...

C语言右结合性的运算符,C语言中,哪些运算符具有左结合性?哪些具有右结合性?

1楼 蝶梦 姬 c语言中右结合的 运算符有 1 逻辑非运算符 按位取反运算符 前缀增量运算符 前缀减量运算符 正号运算符 负号运算符 类型 类型转换运算符 指针运算符 地址运算符 sizeof长度运算符 2 条件运算符 3 赋值运算符 2楼 儒雅的小涛 单目运算符 条件运算符 赋值运算符 c语言中,...