C语言中条件预算符的结合方向如何?

自左向右还是自右向左?最好有个例子~谢谢

条件运算符(?:)这个表达式,它的结合是右结合式的。就是说自右向左运算。这个是硬性的规定,没有为什么。
它属于三目运算符,对第一个表达式作真、假判断,然后根据结果返回另外两个表达式其中的一个的值。
<表达式1>?<表达式2>:<表达式3>
在运算中,首先对第一个表达式进行判断,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。
例如:
a=(b>0)?b:-b;
当b>0成立时(为真),将b赋值给a:a=b;当b>0不成立时,将-b赋值给a:a=-b。
有人觉得,这正是从左往右算的啊。不错,但是,结合性不是指这个。
一个多运算对象的表达式运算时的前后顺序是先看优先级,高优先级先计算,低优先级后计算!在优先级相同的情况下,要看结合性,左结合性的运算符由左向右运算,右结合的运算符由右向左运算!
所以,在有相同优先级的时候才考虑到结合性。
看这个:
a?b:c?d:e
这个要怎么算?先看优先级,两个一样。再看结合性,右结合,所以:
先算c?d:e
再算 a?b:(c?d:e) 这就是所谓右结合。如果是左结合的话 就是先算a?b:c
不知道你明白了没有。

另外,并非只有=是右结合的 c语言书后都有,结合性和优先级如下:
优先级 运算符 结合性
(最高) () [] -> . 自左向右
! ~ ++ -- + - * & sizeof 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左 (最低) , 自左向右

希望能给你帮助。

参考资料:以上是参考了百度上很多的资料后得到的答案。部分内容是复制过来的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2008-12-08
C中,除了=,所有的运算符都是左结合性的,也就是从左向右算的。
注意运算符的优先级,优先级不同可能会导致表达的计算方向有变化。

C语言中条件预算符的结合方向如何?
条件运算符(?:)这个表达式,它的结合是右结合式的。就是说自右向左运算。这个是硬性的规定,没有为什么。它属于三目运算符,对第一个表达式作真、假判断,然后根据结果返回另外两个表达式其中的一个的值。<表达式1>?<表达式2>:<表达式3> 在运算中,首先对第一个表达式进行判断,如果为真,则返回...

C语言的计算符号明细
在C语言中,只有4个运算符规定了运算方向,它们是&&、| |、条件运算符及赋值运算符。&&、| |都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如 a = 0 && b; &&运算符的左边位0,则右边表达式b就不再判断。在条件运算符中。如a?b:c;先判断...

关于C语言的运算符有个问题,请各位达人帮解答下!谢谢!!
因为是指针,所以值是不变的,例如*q=3,*p=2,这个条件*p++=*q--后输出语句还是相当于*p=*q,=3了,这个++和--不影响,因为指针的++--符号是改变的地址值,数值是不变的,例如输出内存地址%x的话这个条件就其作用了,改变了地址值!

一个C语言问题
x=y==z,你应该知道后面的那个==号预算符高于赋值预算符,所以执行y==z,这里你就不能把看作简单的等号运算,应该看作一个判断,如果y和z的值相等,y==z它的值就是1,如果y和z的值不同,那么它的值就是0 ,你的题目里y和z都为5,所以y==z的值为1,再赋值给x,所以x=1.输出为1!这...

设有int变量i,j,k,其值分别为1,2,3
第二步根据第一步预算得到表达式 i++==1&&1 先进行++ --运算 i=2 (注:I=2是最后结果)再行进==预算 得到表达式0&&1 最后得到表达式的值为0 与你的结果不太一致,提供参考。下边是C语言的运算顺序,可以根据这个来运算。C语言运算符分类 1级(左结合)() 圆括号;[]下标运算符;-...

c语言!!!求解
在c语言里面,结果为真就是1,为假就是0。所以如果换成a大于b的话,m的值就为0了!后面个括号同理,所以n的值为0。对于||这个符号,记住,||号左边为真(非0值时),右边的程序不再运行,这个表达式直接就为真(1)了!如果左边为假(0时),那就继续运行右边,右边也为假,那结果就是假...

C语言里,怎样理解表达式(x=a>b)&&(y=c>d)的意义?
将a>b的值赋值给x 将c>d的值赋值给y 然后进行逻辑与运算。 关键是优先级

C语言中x++和++x的区别?
C语言中x++和++x的区别如下:x++是在有这个的这个算式中先使用x,再自增1及x=x+1。++x是先自己加1,再使用。用 ' ' 包括起来的都是字符,也就是char型的量,注意是量,不是变量,而x则就是变量。比如你有一个char型的变量x,你想把x的值赋值为x,就这样写 x='x'; 将字符'x'赋值...

c语言除号预算符问题
d是整数输出,后面传的浮点数时就错了,浮点输出改成%f。你说的想试一下的情形,要做强制类型转换,printf("输出%d %d", (int)(15.0\/5), (int)(15.0\/(-5)));

c语言:求用条件预算符求变量的绝对值。
){ int a , M ;定义整数a,M scanf (" %d ", &a) ;输入整数a M = (a<0)?-a:a ;或(a>0)?a:-a ;意思是如要a大于0输出a的值否则输出-a的值,也就是求a的绝对值给M printf (" abs (a) = %d : , M) ;\/\/abs是C语言求绝对值函数,这句的意思是输出a的绝对值M } ...

相似回答
大家正在搜