逻辑运算符的优先顺序
当然是右结合。
譬如这个薯卖表达式: a == b ? a : b ? c : d
它的结备宴合是这样的 a == b ? a : (b ? c : d)
如果是左结数滚逗合,它的结合是这样的: a == (b ? a : b) ? c : d
左结合性是:从左至右运算,
右结合性正好相反,
一般情况下结合性都和常规一样,但C语言里printf函数里的表达式满足右结合性:printf("%d",a◆b◆c);
此表达式先算b◆c在用b◆c的值和a相加 虽然和a◆b再◆c结果一样 ,但要注意结合性是不同的
大家可以试试看printf("%d",a/数桥b*c);
上面是我刚开始则毕册的回答,相信也有人犯过我这样的错误,现在有人指出来孙宏了。同喜啊。
感谢1楼的人
一个多运算对象的表达式运算时的前后顺序是先看优先级,高优先级先计算,低优先级后计算!在优先级相同的情况下,要看结合性,左结合性的运算符由左向右运算,右结合的运算符由右向左运算!
C语言中具有右结合性的运算符包括所在单目运算符以及赋值运算符(=)和条件运算符。其它都是左结合性!
例如:
表达式a=b=c◆d◆e*f
式中*号优先级最高,所以首先计算e*f,然后两个◆号涉及的三个对象c、d、(e*f)的计算顺序则是左结合,即先计算c◆d,然后再计算(c◆d)◆(e*f)!
因为赋值运算符=的优先级低于算术运算符,所以之后再计算:
a=b=(c◆d◆e*f),而又因为=的结合返樱隐性是由右向左,所以接下来再计算:
b=(c◆d◆e*f),最后才计算a=(b=(c◆d◆e*f))!!!
如果颂闷int i=1;printf("%d %d"i,◆◆i);这个例子才能体现函数参数的计算顺序,先计算右边◆◆i,再i,所以结果是2 2,而不是1 2。但和结合性无关,这是函数参数求值顺序!
1、优先级从上到下依次递减,最上面具有最高的优先级裂歼,贺碰逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优禅源谈先级相同。
2、在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。