注册 登录
编程论坛 C++教室

请教一道c++运算题,清华网络教程中的一道习题

Undeadsprout 发布于 2007-09-07 16:58, 1631 次点击
 #include <iostream.h>
 void main()
 {
  int x=5;
  int y=2+(x+=x++,x+8,++x);
  cout<<y<<endl;
 }
输出是:14
怎么得到的?
x+=x++ 这句看不懂
20 回复
#2
远去的列车2007-09-07 17:04

错啦

[此贴子已经被作者于2007-9-7 17:14:09编辑过]

#3
天堂落日2007-09-07 17:09
++和+=应该属于同一运算级的
从右向左运算
#4
Undeadsprout2007-09-07 17:10

二楼
结果你蒙对了
逗号运算符计算顺序是从左至右依次计算各个表达式的值,最后计算的表达式的值和类型便是整个表达式的值和类型。
所以你讲的不对

[此贴子已经被作者于2007-9-7 17:11:12编辑过]

#5
远去的列车2007-09-07 17:13

呼,原来我错了,呵呵

[此贴子已经被作者于2007-9-7 17:13:18编辑过]

#6
天堂落日2007-09-07 17:22
y=2+(x+=x++,x+8,++x);
首先是x++=6,此时x=5,所以x+=x++应该是11
然后运行x+8=19
最后是++x,此时x=12
y=2+(11,19,12)=14

是不是这样的?
#7
Undeadsprout2007-09-07 18:15
回复:(天堂落日)y=2+(x+=x++,x+8,++x);首先是x++=6...
我现在认为应该先是:x+=x,得到x=10
x++得到11
++x得到12
y=2+12
+=,自加++的优先级是一样的,应该从左向右算的,对不对?

[此贴子已经被作者于2007-9-7 18:18:20编辑过]

#8
faee02007-09-07 21:09
有人会写这么无聊的代码么?
#9
cince2007-09-07 23:02


确实是无聊的代码。。清华网络没有那差劲吧?
#10
hegj2007-09-08 23:46
++的优先级比+=高吧
#11
流川枫22007-09-09 10:54
以下是引用Undeadsprout在2007-9-7 18:15:54的发言:
我现在认为应该先是:x+=x,得到x=10
x++得到11
++x得到12
y=2+12
+=,自加++的优先级是一样的,应该从左向右算的,对不对?

+=与++优先级一样高,且这两个运算符的结合性均是从右向左,
即先计算++。。。

#12
xlh52252007-09-09 16:13

无了的程序~~~~

#13
sifutian2007-09-09 17:02
x+=x++;
由于++的优先级高于+=,所以先算++。
假设把+=写成=,表示出来就是,x=(x++)+x;
但由于是后缀自增,所以在等式中,先取x的原值,即中边的x的值先是5,
然后x++,后面的x自增为6,所以x=11.
不知道我的解释你是否满意
#14
qwl19822007-09-09 20:30
x+=x++ 其实就等于 x+=x,x++;
x++是先参与运算然后再自加~
int y=2+(x+=x++,x+8,++x);可以理解为int y=2+(x+=x,x++,x+8,++x);
所以只写int y=2+(x+=x++);的话,y的值是12。

int y=2+(x+=x/*x的值是10*/ ,x++/*x的值是11*/,x+8/*x的值不变*/,++x/*x的值是12*/);

这样就理解啦

#15
绝种好小伙2007-09-09 21:39
回复:(Undeadsprout)回复:(天堂落日)y=2+(x+=x+...

#include <iostream.h>
void main()
{
int x=5;
int y=2+(x+=x++,x+8,++x); // ①x+=x 得到10;②++ 得到11;③++x 得到12
cout<<y<<endl;
}

#16
yuyunliuhen2007-09-09 22:20

老问题了,而且经久不衰。

#17
snakeImao2007-09-10 14:40

++ 的优先级比 += 高。

由于++是变量先使用后再加 1 ,所以 x+=x++,应该是先算x+=x,即得:x=10,再算x=x+1,得 x=11,++x=12

[此贴子已经被作者于2007-9-10 14:48:33编辑过]

#18
virusswb2007-09-10 16:39
回复:(Undeadsprout)请教一道c++运算题,清华网络教...
x+=x++就是 x=x+(x++)这句完了之后x就是11,
#19
terisevend2007-09-10 18:47
++的优先级 比+=高!(既然是清华的题,就在清华的书中找到这优先级关系.)
#20
sunkaidong2007-09-11 09:28
以下是引用天堂落日在2007-9-7 17:22:45的发言:
y=2+(x+=x++,x+8,++x);
首先是x++=6,此时x=5,所以x+=x++应该是11
然后运行x+8=19
最后是++x,此时x=12
y=2+(11,19,12)=14

是不是这样的?

我觉得这个好象是对的,理解的蛮深刻的

#21
Undeadsprout2007-09-11 20:11
回复:(sifutian)x+=x++;由于++的优先级高于+=,所以...
赞同!
1