青岛公爵拍卖公司评论:(x=8*2,x*4),x*2 整个表达式的值是多少

来源:百度文库 编辑:高考问答 时间:2024/04/29 08:14:30
真确答案是128,我就想知道为什么

128不对呀。
(x=8*2,x*4),x*2
先执行x=8*2后x=16,后面那个x*4纯粹是迷惑人的,值被丢弃掉了。
然后逗号表达式取最右边的值为表达式的值,即x*2,值为32。

是C语言吧???
我刚好在教这一知识点.
最终的值应该为32(TC3.0)
先进行括号里的运算,括号里包括一个逗号表达式(即x=8*2,x*4)
逗号表达式的优先级最低,所以先进行赋值运算,此时x=16.
x*4=16*4=64即括号里的表达式值为64
但逗号表达式的取值是取最后一个表达式的值,即x*2=16*2=32
所以最终的值应该为32(TC3.0)
请参考《C语言程序设计》谭浩强第一版39页

#include<iostream.h>
void main()
{
int x,y,z;
int a,b;
a=((y=x=8*2,z=x*4),x*2);
b=(x=8*2,x*4),x*2;
cout<<y<<endl<<z<<endl<<a<<endl<<b<<endl<<endl;
}
结果为:
16
64
32
64

在(x=8*2,x*4),x*2里是先执行x=8*2,然后再x=x*4。后面的不执行。
在((x=8*2,x*4),x*2)里是执行x=8*2,忽略掉x*4。再执行x=x*2。

(x=8*2,x*4)先看这个,可以看成是给X赋值的表达式,而逗号表达式的值是决定于后一个表达式的,因为X=16*4=64,有了X的值就容易得到整个表达式的值了,同上理,整个也是一个逗号表达式,因此表达式的值为X*2=64*2=128

y=(x=8*2,x*4),x*2 ;
//y=64,x*2其实是无用的

y=((x=8*2,x*4),x*2) ;
//y=32