‘壹’ c语言中结合性自右向左怎么理解
C语言中结合性自右向左,简单说就是,从表达式右边开始执行;
1、只有同优先级的运算符才具有结合性“自左至右”或者“自右自左”一说。
2、exp(不同优先级运算符,依据优先级高低进行运算):
int a = 1, b =10, c = 30;
int a = a * b + c;
因为 * 比 + 的运算符优先级高,所以先计算a * b (先计算左边,未考虑结合性),在计算 10 + c,结果是 a = 300
3、c++标准对子表达式进行求值的次序没有做出规定,由各个c++编译器厂商自己决定(参见Bjarne Stroustrup所着的C++程序设计语言)。因此,开发人员不要编写依赖子表达式执行次序的代码,因为为了实现同样的功能,完全可以采用更为清晰的代码。
例如,语句int c=(a++)+(a++)+(a++);中给c赋值的表达式(a++)+(a++)+(a++)的求值。编写的目的是为了提高效率。
4、如果确实想钻研,那么根据Bjarne Stroustrup所说的“子表达式求值次序”,枚举各种可能,就可以理解所有不同结果的编译器行为。例如,上述语句int d=(++b)+(++b)+(++b);可以概念上表示为:int d=E1+E2+E3;(其中,E1,E2,E3是+运算符的同层次表达式,(E1+E2)和E3是+运算符的同层次表达式),其它同层次表达式可以同理)则其计算次序可以是:
1)E1(此时b=2)=>E2(此时b=3)=>E1+E2=b+b=6放入中间变量(此时b=3)=>E3
(此时b=4)=>d=10 对应VC的结果
2)E1(此时b=2)=>E2(此时b=3)=>E3(此时b=4)=>E1+E2=b+b放入中间变量(此时b=4)=>d=12 对应BC的结果;
‘贰’ C语言中哪些运算是由左向右结合哪些是右向左结合请详细说明并解释下下面的题
x=1,y=x+3/2的值是? 答案为:2
先计算3/2,由于是整形计算,结果为1(整型数据);而后,x+1,因为x为浮点数据,所以计算结果结果为2(浮点型数据)。
优先级 运算符 结合性
(最高) () [] -> . 自左向右
! ~ ++ -- + - * & sizeof 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左
(最低) , 自左向右
‘叁’ c语言printf函数运算顺序为什么从右到左
不是printf函数运算顺序为什么从右到左,而是类似的所有函数,包括算定义函数的参数计算都是从右至左。函数数有多个参数时计算总得有个顺序吧?不是从左至右,就是从右至左,抑或从中间向两边;一句话选定一个顺序后就“大家都这么办”,总不能有些函数从左至右,有些函数从右至左吧,那编译器就太难做了。当初选择从右至左肯定是这样有好多方便之处,比如printf中的参数表,由于C是基于栈操作的,栈又是后进先出的,从右至左计算压栈,然后按弹出顺序输出到屏幕上刚好顺应了大多数文本从左至右的习惯,很是方便;若从左至右计算压栈,那也不是说不可以,但处理就没有这么方便了。个人管见,供参考。
‘肆’ c语言中条件运算 结合方向 从右到左 什么意思
在标准C语言的文档里,对操作符的结合性并没有作出非常清楚的解释。一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个。 每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。例如,在表达式a*b+c中,乘法运算的优先级高于加法运算符的优先级,所以先执行乘法a*b,而不是加法b+c。 但是,许多操作符的优先级都是相同的。这时,操作符的结合性就开始发挥作用了。在表达式中如果有几个优先级相同的操作符,结合性就起仲裁的作用,由它决定哪个操作符先执行。像下面这个表达式: int a,b=1,c=2; a=b=c; 我们发现,这个表达式只有赋值符,这样优秀级就无法帮助我们决定哪个操作先执行,是先执行b=c呢?还是先执行a=b。如果按前者,a=结果为2,如果按后者,a的结果为1。 所有的赋值符(包括复合赋值)都具有右结合性,就是说在表达式中最右边的操作最先执行,然后从右到左依次执行。这样,c先赋值给b,然后b在赋值给a,最终a的值是2.类似地,具有左结合性的操作符(如位操作符“&”和“|”)则是从左至右依次执行。
‘伍’ 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语言运算的时候到底是从左往右还是从右往左算啊
相同优先级从左到右,否则先算高优先级
比如5+6*7是先算6*7再算5+42
5+6+7就是先算5+6再算11+7
‘柒’ C语言中,什么情况下从左向右运算什么情况下从右向左运算是不是还有左右顺序的读取问题菜鸟!菜鸟!
这个要看运算符的优先级了,在同级的情况下,双目运算符都是左结合(从左向左运算),三目运算符都是又结合(从右向左运算);不同级情况下,先算级别高的。
‘捌’ c语言中逗号运算符是从左向右算,还是从右向左算啊
int a ;
a = 2 * 3, 4 * 5;
首先计算2*3,结果是6
接着计算a = 6(因=优先级大于,)
接下来计算4*5,结果是20
20是整个逗号表达式的值
-------------------------
由左向右运行,最后的表达式的值是整个逗号表达式的值
‘玖’ c语言中,运算顺序好像没有规定是左到右还是右到左吧,12/3×2这个不同顺序不同结婚,怎么办
没有统一的规定
但不同运算符是有计算顺序的
比如 加减乘除 就是从左到右
赋值 是从右到左
比如你这个 除法和乘法优先级相同,顺序为从左到右 于是就是
12/3*2
=4*2
=8
‘拾’ c语言中运算符的结合方向什么时候从左至右,什么时候从右至左
左结合性:自左至右。
右结合性:自右至左。
一个运算量两侧的运算符优先级相同时,按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性和右结合性。
如,算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。
而最典型的右结合性运算符是赋值运算符,如x=y=z,由于“=”的右结合性,应先执行y=z,再执行x=(y=z)运算。
(10)c语言什么时候计算是从右向左扩展阅读
C语言中的运算符
(1)算术运算符(+,-,*,/,%,++,--)。
(2) 关系运算符(<, >, <=, >=, ==, ![KG-*8]=) 。
(3) 逻辑运算符(!, &&, ||) 。
(4) 位运算符(<<, >>, ~, |, ^, &) 。
(5)赋值运算符(=,及其双目运算符的扩展赋值运算符)。
(6)条件运算符(?:)。
(7)逗号运算符(,)。
(8) 指针运算符(*, &) 。
(9)求字节数运算符(sizeof)。
(10)强制类型转换运算符((类型))。
(11) 分量运算符(·, ->) 。
(12)下标运算符([])。
(13)圆括号运算符(())。