① 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语言的条件运算符具有右结合性
② 三目运算符
a=null?po.setName(""):po.setName(a);
三目运算符格式
x?y:z
x代表Boolean类型的值,先计算x的值,如果是true,则整个三木运算符的值为表达式y的值,如果是false则为z值
③ 三目运算符的结合性,究竟是从左向右还是从右向左
是从左往右的啊
这里等于
x =1 ? 1 : (剩余部分);
先判断x为真, 然后整体为真。 后续的都不会判断 更不会执行了。
m还是初始值0
④ 三目运算符 的问题
A=[表达式]?a:b;
等价于
if(表达式)A=a;
else A=b;
同理,
printf(y?"\n":"no\n");
等价于
if(y)printf("\n");
else printf("no\n");
求采纳为满意回答。
⑤ 请告诉我哪里错了三目运算符是不是不是这样用的为什么执行不了
没看懂你这个程序要表达的意思~!a=b?b:a表达式是有问题的,如果你要完成a等于b的判断的话,应该写为a==b。因为在C里=号为赋值号!(a==b?b:a)这个表达式其实直观的说就是:问a等于b吗?如果等于(成立)就返回b(紧跟在?号后面那个值),不等于(成立)就返回a(:号后面那个值)。你可以用这个三目运算符做一些简单的选择比较。如:
#include<iostream>
usingnamespacestd;
intmain()
{
inta=0;
intb=0;
cout<<"请输入两个数字:"<<endl;
cin>>a>>b;
cout<<"您输入的最大值为:"<<(a<b?b:a)<<endl;
return0;
}
输出结果:
因为不知道你这个程序要做点什么,如果没有说明白,你可以到这里看看。http://ke..com/view/1897705.htm
⑥ C语言中 怎样理解三目运算符(条件运算符)的右结合性
这里涉及了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语言这个角度是无法判别的,这是个实现问题,如果要想写出健壮的可移植的代码就应该避免这种表述。
总结一下,就是先看优先级,次看结合性,有的求值有序,有的则无序。
⑦ 三目运算符的含义是
三目运算符是指一个运算符号,这个运算符号需要三个逻辑运算量参与。本人知识有限暂时举不出例子。但可以参考双目运算符如“ ”,单目运算符如“-”(负号)。
⑧ 三目运算符:结合性
人家本来就是条件语句,肯定是先判断了。a=3.b=4.显然a<b,直接就是进行 ++b了。很自然,不违背