c语言?:自右向左怎么理解
1、简单说就是,从表达式右边开始执行;
只有同优先级的运算符才具有结合性“自左至右”或者“自右自左”一说。
2、exp(不同优先级运算符,依据优先级高低进行运算):
int
a
=
1,
b
=10,
c
=
30;
int
a
=
a
*
b
+
c;
因为
*
比
+
的运算符优先级高,所以
先计算a
*
b
(先计算左边,未考虑结合性),在计算
10
+
c
结果是
a
=
300
exp(同优先级运算符依据结合性进行运算):
int
a,
b
=
1,
c
=
8;
a
=
b
=
c;
赋值运算符其结合性即为自右向左,即
a
=
(
b
=
c),
其结果是
b
=
8,
a
=
8;
(错误答案:自左向右进行结合的话a
=
1)
c语言中运算符 ?: 的自右至左结合方向怎么体现
赋值运算符是自右向左结合的。
以如下代码为例:
int
a
=
1,b=2,c=3;
a=b=c;
printf(“%d,%d,%d\n”,
a,b,c);
如果赋值运算为自左向右,那么执行顺序为
a
=
b
=
2;
b
=
c
=
3;
结果a
=
2,
b=3,
c
=
3。
将输出2,3,3
如果赋值运算为自右向左,那么执行顺序为
b
=
c
=
3;
a
=
b
=
3;
结果a
=
3,
b=3,
c
=
3。
将输出3,3,3
通过实际运行,结果为3,3,3。说明结合方向是自右向左的。
c语言中条件运算 结合方向 从右到左 什么意思
运算符的结合方向(顺序)决定了计算的顺序。条件运算符(? :)的结合方向是从右到左,也即运算符的匹配顺序是从右往左的。
下面举例说明结合顺序从右到左的含义:
int a=1, b=3, c=2, d;
d = ab ? a : cb ? c : b;
// 根据从右到左的结合顺序,则该表达式等价于d = (ab ? a : (cb ? c : b));
// 计算过程:
// 1、先算ab,结果为0;
// 2、再算(cb ? c : b),之后算cb,结果为0,
// 3、所以最后结果为b的值,也即等于3
// 如果是从左到右的结合顺序,那么该表达式等价于d =((ab ? a : cb) ? c : b);
//计算过程:
// 1、先算ab,结果为0;
// 2、再算cb,结果为0;
// 3、所以d=b,结果为b的值,也即等于3
ps:虽然计算结果相同,但是计算的顺序是完全不同的。
c语言中运算符有哪几种,优先级顺序是怎样
C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。
运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。
一级运算符:标识,常量,字符串文字量,优先级提升表达式最优先执行。
二级运算符:数组下标运算(expression)、函数调用(argument-expression-list)、成员访问(identifier、 – identifier)、后缀自增(i++)、后缀自减(i–)、 复合初始化(initializer-list)。
三级运算符:前缀自增(++i)、前缀自减(–i)、单目转型表式式(取地址 ,提领 * , 正号+ ,负号-、 位反~ 逻辑否!)、求类型长度(sizeof unary-expression)。
四级运算符:强制表达式成为type-name指定的类型( type-name ) cast-expression。
五级运算符:“ * ” 乘法运算符。
六级运算符:“ + ”加法运算符。
七级运算符: 左移运算符; 右移运算符。
八级运算符:、=、、=关系运算符。
九级运算符:“ == ”等于运算符;“ != ”不等于运算符。
十级运算符:“ ”按位与运算符。
十一级运算符:“ ∧ ”按位异或运算符。
十二级运算符:“ | ”按位或运算符。
十三级运算符:“”逻辑与运算符。
十四级运算符:“ || ”逻辑或运算符。
十五级运算符:? :条件运算符。
扩展资料
C语言中各运算符的结合性:
1、左结合性(自左至右):
例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合方向就称为“左结合性”。
2、右结合性(自右至左)
自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
参考资料来源:百度百科——C语言运算符