int x=4,y=(++x)+(++x)+(++x); 结果21???为什么呀?在线等.............................急

Sachegirl 2005-03-09 08:57:18
int x=4,y=(++x)+(++x)+(++x);


/* y=21 */(我知道运算后x=7,只是不明白,为什么y=21???)


请说明原因,谢谢
...全文
1902 84 打赏 收藏 转发到动态 举报
写回复
用AI写文章
84 条回复
切换为时间正序
请发表友善的回复…
发表回复
archim 2005-04-20
  • 打赏
  • 举报
回复
对int x=4,y=(++x)+(++x)+(++x); 诸如此类的问题的执着研究是中国计算机教育的特色吗?
fenving 2005-04-20
  • 打赏
  • 举报
回复
to whyglinux(山青水秀)&初出毛炉

hehe,说的也是
sTigerwsk 2005-04-20
  • 打赏
  • 举报
回复
书和书讲的不一样
在TCPL里说的是因为优先级的问题
whyglinux 2005-04-19
  • 打赏
  • 举报
回复
To hermit2004(初出毛炉)

>> 回去好好看看书你们!这么简单的问题都不懂!

其实这个问题并不简单。真正把这个问题弄清楚了,就表明你又进了一大步。很可惜,包括你在内的很多人对这个问题并不清楚。

想问一下:x=4;,你是怎么推导出“第一个(++x)=6”的?这才是一个简单的问题吧。
jingbinqwe 2005-04-19
  • 打赏
  • 举报
回复
使用TC2.0
int x=4;int y=(++x)+(++x)+(++x);
y值的确为21
int x=4;int y=++x;
y值为5,说明编译器本身不应有个别问题
int x=4;int y=+++x;
y为5
int x=4;int y=+(++x);
y为5
int x=4;int y=x+++x;
y为8
int x=4;int y=x+(++x);
y为10
但int x=4;int y=++(++x);
编译出错
我想问题出在上面两行代码的区别上,编译器自身共性的问题(Turbo C2.0)++x前有+且有变量是自加
两次
hermit2004 2005-04-19
  • 打赏
  • 举报
回复
回去好好看看书你们!这么简单的问题都不懂!
x=4; y=(++x)+(++x)+(++x);++运算符的意思是先加1赋值给x后再运算。第一个(++x)=6,第二个(++x)=7,第三个(++x)=8,y=6+7+8=21;
charkie 2005-04-19
  • 打赏
  • 举报
回复
TC3中结果也是21。
charkie 2005-04-19
  • 打赏
  • 举报
回复
其他编译器中的结果如何呢?有没有人试过啊?
sTigerwsk 2005-04-18
  • 打赏
  • 举报
回复
······
++的优先级高
会先做三次自增
然后再加
然后你就明白了
awperpvip 2005-04-18
  • 打赏
  • 举报
回复
与编译器有关
finytang 2005-03-19
  • 打赏
  • 举报
回复
这个没甚么好讨论的,完全依赖编译器
类似的还有
x=f()+g();
printf("%d%d",n++,f(n));
都是和编译器的计算顺序有关的,所以这种代码还是不要写为好
BillSmith 2005-03-19
  • 打赏
  • 举报
回复
写出这种代码的人该吊起来打!
bin2142 2005-03-19
  • 打赏
  • 举报
回复
好无聊啊!
thuers 2005-03-18
  • 打赏
  • 举报
回复
21
和编译器有关系


我们老总专门讲过
sharkhuang 2005-03-18
  • 打赏
  • 举报
回复
基本上应该是19
BillSmith 2005-03-17
  • 打赏
  • 举报
回复
这里该搞个FAQ了。
这种问题直接踢掉。
5261 2005-03-16
  • 打赏
  • 举报
回复
不同的编译器会有不一样的结果!!!!!!
我还见过得Y=18
HNET 2005-03-16
  • 打赏
  • 举报
回复
依赖于编译器的运算方式:有的编译器从左往右计算表达式,有的则从右往左计算。
另外,x = 1 ;( x++ )的值为1,但x的值为2;
好了,假设编译器从左往右计算复合表达式,则:
(++x)+(++x)+(++x) = ( ( ++x ) + ( ++x ) ) + ( ++x )
= ( 4 + 6 ) + ( ++x ) // x == 6
= 10 + 11 // x == 7
= 21
flying_dancing 2005-03-16
  • 打赏
  • 举报
回复
-_-
好贴!顶
我自己也试了 VC6.0是19
飞猪不瘦 2005-03-16
  • 打赏
  • 举报
回复
看看在vc6.0中的汇编代码就知道为什么了,y = 19
int y=(++x)+(++x)+(++x);
mov eax,dword ptr [ebp-4]
add eax,1
mov dword ptr [ebp-4],eax
mov ecx,dword ptr [ebp-4]
add ecx,1
mov dword ptr [ebp-4],ecx
mov edx,dword ptr [ebp-4]
add edx,dword ptr [ebp-4]
mov eax,dword ptr [ebp-4]
add eax,1
mov dword ptr [ebp-4],eax
add edx,dword ptr [ebp-4]
mov dword ptr [ebp-8],edx
加载更多回复(64)

33,323

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧