| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 546 人关注过本帖
标题:自减的算法
只看楼主 加入收藏
xingjing314
Rank: 2
等 级:论坛游民
帖 子:160
专家分:32
注 册:2007-1-23
结帖率:94.74%
收藏
 问题点数:0 回复次数:5 
自减的算法

int x=3,y;
y=--x+--x+x++;
printf("x=%d y=%d\n",x,y);
输出:x=2,y=3
是怎么算的,我想不出来。
我是这样算的--x一起算为2+1,得3再自加的4,和正确答案
不一样。请教高手应该如何计算?谢过了。

搜索更多相关主题的帖子: 算法 
2007-01-28 17:57
hiaod
Rank: 1
等 级:新手上路
威 望:1
帖 子:66
专家分:0
注 册:2007-1-25
收藏
得分:0 
--x是前缀方式,所以它先自减成为2,由于增量运算(即++、--)的级别高于算术运算,所以后面的+要等第二个--x做后才执行,这时的x,已经为1了,最后的x++是后缀形式,先取值运算,然后再自加1,因此,y=1+1+1=3,而x因为后缀自加变成了2。
对于增量运算,如果表达式复杂,那么就添加括号,或者分解成几个语句,这样就不容易理解错误了。不要去看谭浩强书上讲的那些内容,既罗嗦,又没有讲清楚。
2007-01-28 18:48
xingjing314
Rank: 2
等 级:论坛游民
帖 子:160
专家分:32
注 册:2007-1-23
收藏
得分:0 

谢过了


2007-01-28 19:06
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
#include<stdio.h>
void main()
{
int i=3,j;
j=++i+(++i)+(++i);
printf("%d,%d\n",j,i);
}

如果按2楼的那样推理

结果应该是18,6才对

为什么显示结果是16,6呢?

我的编译软件是VC

自我放逐。。。
2007-01-28 19:18
hiaod
Rank: 1
等 级:新手上路
威 望:1
帖 子:66
专家分:0
注 册:2007-1-25
收藏
得分:0 
呵呵,C++在增量运算的优先级上与C有所不同。
在C++中,增量运算与运算运算的级别是一样的,那么先执行两个括号内的运算,这里i的值为5,然后再从左向右运算:
(5+1)+5+5 =16
这时最前面的自加不能影响后面的i了。
这在C/C++中称为赋值副作用。
2007-01-28 19:49
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用hiaod在2007-1-28 19:49:00的发言:
呵呵,C++在增量运算的优先级上与C有所不同。
在C++中,增量运算与运算运算的级别是一样的,那么先执行两个括号内的运算,这里i的值为5,然后再从左向右运算:
(5+1)+5+5 =16
这时最前面的自加不能影响后面的i了。
这在C/C++中称为赋值副作用。

对不起

你错了

#include<stdio.h>
void main()
{
int i=3,j;
j=++i+(++i)+(++i);
printf("%d,%d\n",j,i);
}



#include<stdio.h>
void main()
{
int i=3,j;
j=(++i)+(++i)+(++i);
printf("%d,%d\n",j,i);
}

显示结果是一样的

都是16,6

其次,我虽然用的是VC,但是我的源文件用的是stdio.h

是C的,而不是C++的


自我放逐。。。
2007-01-28 20:00
快速回复:自减的算法
数据加载中...
 
   



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

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