c语言入门问题:float x=3;int y;y=x+2,这个赋值问题是先将2转换为2.0,再计算3.1+2.0,运算结果为5.1,
最后将float的结果5.1转化为5赋值给y,请问这是怎么体现赋值运算符的结合方向为从右向左的,如果是从左往右,结果又是什么呢?还有:intx,y;x=10+(y=5);...
最后将float的结果5.1转化为5赋值给y,请问这是怎么体现赋值运算符的结合方向为从右向左的,如果是从左往右,结果又是什么呢? 还有:int x,y;x=10+(y=5);是正确的,为什么x=10+y=5就不对了呢,求详细解答。。。
展开
3个回答
2013-06-16
展开全部
结合性规定的是在计算表达式的过程中,当出现多个同一级别的运算符并列时是按从左向右还是从右向左的顺序进行运算,同一级别的运算符的结合性必需相同。在你举的例子中没出现多个同一级别运算符并列的情况,故无法体现结合性。现举个能体现赋值运算符结合性的简单例子。比如我们要把3赋给a,再把a的值赋给b,会有如下代码:
b=a=3
先算a=3,再算b=a,这就是右结合性。先算b=a,再算a=3就是左结合性,当然若是左结合性的话赋值运算符的语法也会作相应改变。再说说第二个问题,第一个式子x=15相信你没问题。第二个式子按运算符优先级原则,先算10+ y(y无初值),然后将5赋给10+ y的结果,但10+ y的结果不是个变量,所以会出错。不知你是不是认为这个式子是将10+ y的结果赋给x,之后再将5赋给x,这首先是违背了赋值运算符的右结合性,再有系统并不把赋值表达式当变量来处理,像(a=3)=5这样的表达也是错的。
b=a=3
先算a=3,再算b=a,这就是右结合性。先算b=a,再算a=3就是左结合性,当然若是左结合性的话赋值运算符的语法也会作相应改变。再说说第二个问题,第一个式子x=15相信你没问题。第二个式子按运算符优先级原则,先算10+ y(y无初值),然后将5赋给10+ y的结果,但10+ y的结果不是个变量,所以会出错。不知你是不是认为这个式子是将10+ y的结果赋给x,之后再将5赋给x,这首先是违背了赋值运算符的右结合性,再有系统并不把赋值表达式当变量来处理,像(a=3)=5这样的表达也是错的。
展开全部
x=10+(y=5); 小括号里的叫赋值表达式,小括号里的东西运算优先级最高,先算,小括号里的东西得 5
变成 x=10+5, 是正确的赋值语句。
x=10+y=5 连续赋值,= 左边必须是变量, 10+y 不是变量。所以错。
如果是 x=y=5; 连续赋值,两个 = 左边 都是 变量,所以 正确。
变成 x=10+5, 是正确的赋值语句。
x=10+y=5 连续赋值,= 左边必须是变量, 10+y 不是变量。所以错。
如果是 x=y=5; 连续赋值,两个 = 左边 都是 变量,所以 正确。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结合只能是从右往左
+的优先级要高于= x=10+y=5中先算10+y,再右=,再左=
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询