| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 582 人关注过本帖
标题:很奇怪的问题,有人知道吗?
只看楼主 加入收藏
leiyuzi
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2005-3-27
收藏
 问题点数:0 回复次数:7 
很奇怪的问题,有人知道吗?
#include <iostream.h>
void main()
{
 int i=3,k,j;
 k=(i++)+(i++)+(i++);
 cout<<"k="<<k<<endl;
 i=3;
 j=(++i)+(++i)+(++i);cout<<i<<endl;
 cout<<"j="<<j<<endl;
}
为什么k的值是9,而不是12;j的值是16,而不是15?
更奇怪的是,若将j改为j=(++i)+(++i),输出的j是10,而i是5,也就是说j=(++i)+(++i)中的两个i值都是5,为什么啊???
2005-08-31 22:40
xjc
Rank: 1
等 级:新手上路
帖 子:95
专家分:0
注 册:2004-12-2
收藏
得分:0 
 i++运行之后才会加1  ++i是运行时就加1 ;
后面的问题是主要因为你用的是一个全局变量i,如果是三个不同的变量,结果就会与你的相同了
另外为什么=16呢,是存在有优先级的问题,还有就是加法运算的先后顺序问题。

时间是最宝贵的
2005-09-01 10:12
leiyuzi
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2005-3-27
收藏
得分:0 
如果是优先级的问题,那么单目运算上面的++i,应该是先运算完啊,那也是4+5+6=15啊,

而且若将j改为j=(++i)+(++i),输出的j是10,而i是5,也就是说j=(++i)+(++i)中的两个i值都是5,这又是为什么呢???
2005-09-02 19:26
andyzhou1101
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-9-6
收藏
得分:0 
费解...

2005-09-06 15:46
longlin
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-9-6
收藏
得分:0 
#include <iostream.h>
void main()
{
int i=3,k,j; // i=3
k=(i++)+(i++)+(i++);//k=i+i+i 因为i++ 是先进行表达式运算后加自身 i=i+3
cout<<"k="<<k<<endl;
i=3;
j=(++i)+(++i)+(++i);cout<<i<<endl;//这里++i 先加i再进行表达式运算因为加法表达式从左到右所以先进行(++i)+(++i)
cout<<"j="<<j<<endl;//运算因i加了两次 i=5 所以表达式为值为10 再与后面的表达式进行运算 ++i=6 所以j=16
}

2005-09-07 21:28
leiyuzi
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2005-3-27
收藏
得分:0 
五楼的兄弟,谢了啊,相信你是对的,终于解决了这个问题啊。
2005-09-11 00:00
苦味酸
Rank: 2
等 级:新手上路
威 望:3
帖 子:142
专家分:0
注 册:2005-9-9
收藏
得分:0 
看起来还真费解啊
何必搞的这么复杂呢

『站在风口浪尖紧握住鼠标旋转!』 『不在于选择什么,而在于坚持多久!』
2005-09-11 16:12
wulidress
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-8-9
收藏
得分:0 
主要是运算的优先级别问题  
2005-10-08 09:57
快速回复:很奇怪的问题,有人知道吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011835 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved