| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1504 人关注过本帖
标题:关于递增、递减运算符
只看楼主 加入收藏
paiwj
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-5-14
收藏
 问题点数:0 回复次数:6 
关于递增、递减运算符

请问这两个问题为什么有不同的结果:

main()

{int j=2;

printf("j=%d,(j++)+(j++)+(j++)=%d\n",j,(j++)+(j++)+(j++));

j=2;

printf("j=%d,(++j)+(++j)+(++j)=%d\n",j,(++j)+(++j)+(++j));

}

运行结果:j=5,(j++)+(j++)+(j++)=9

j=5,(++j)+(++j)+(++j)=12

而如果改成:

main()

{int j=2,y1,y2;

y1=(j++)+(j++)+(j++);

printf("j=%d,(j++)+(j++)+(j++)=%d\n",j,y1);

j=2;

y2=(++j)+(++j)+(++j);

printf("j=%d,(++j)+(++j)+(++j)=%d\n",j,y2);

}

运行结果:j=5,y1=6

j=5,y2=15

搜索更多相关主题的帖子: 运算符 递减 递增 
2004-09-15 14:42
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

对于这种问题是不是可以认为是C语言对待[一般表达式]和[函数参数表达式]的时候有一点点不同呢?

我不知道,请大家赐教。

不过,我想,这种问题应该是研究C语言特性的时候才用吧?一般人怎么可能会用上(++j)+(++j)+(++j)这么BT的东西啊!


淘宝杜琨
2004-09-15 16:26
Jorbo
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2004-9-8
收藏
得分:0 

第一道输出结果是:

2,6

5,13

第二道输出结果是:

5,6

5,13

我想了半天也想不通!!!


2004-09-15 16:28
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 

这道题目在TC和VC++中会得到不同的结果,这是很正常的。因为它们俩不是同一家公司开发的,TC是Borland开发的,而VC++是Microsoft公司开发的。 我想说一下在VC++中这个结果如何得来的,TC中的我不知道,因为我不用TC有好多年。 int j=2; y2=(++j)+(++j)+(++j); 它是这样执行的,可以分为两个语句: y2 = (++j)+(++j); // 先做j 两次++, 得j = 4, y2 = 4 + 4 = 8; y2 += (++j); // 做j 自加一次,的 j = 5, y2 = 8 + 5 = 13; 即做加法时(假如个数大于2),那么先做前面两个,得到的和再和第三个相加,这样继续下去,直到最后一个数。 即如果表达式是这样的话:y2=(++j)+(++j)+(++j)+(++j); 此时y2 = 4 + 4 + 5 + 6 = 19; 如果还是不明白的话,大家可以看看C++语言中的运算符重载,看看它是怎么处理连加的。 上面是对于整形的情况,下面来说说浮点型是怎么处理的。 float j = 2.0; y2=(++j)+(++j)+(++j); 是这样执行的; y2 = (++j); // j = 3.00000, y2 = 3.0000 y2+= (++j); // j = 4.0000, y2 = 7.0000 y2+= (++j); // j = 5.0000, y2 = 12.0000 也就是说它是一个个加进去的。 大家看的很迷惑吧,但它确实这样的,所以大家尽量不要在表达式里面使用 ++,--的 如有说的不对之处,请指出。


如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2004-09-16 19:08
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
这种问题我想不必讨论,本身在一个表达式对同一变量连续自增自减是不许可的.

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-09-16 20:11
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
这种我也觉得没必要讨论,这么用容易出错,而且完全可以用其他方法代替。

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-09-17 12:15
noah183
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-9-18
收藏
得分:0 

请问这两个问题为什么有不同的结果:

main()

{int j=2;

printf("j=%d,(j++)+(j++)+(j++)=%d\n",j,(j++)+(j++)+(j++));

j=2;

printf("j=%d,(++j)+(++j)+(++j)=%d\n",j,(++j)+(++j)+(++j));

}

运行结果:j=5,(j++)+(j++)+(j++)=9

j=5,(++j)+(++j)+(++j)=12

这个程序因为j++是先表示j的值,然后j本身再加1;

而++j是先加1再表达他的值;

所有第一个是2+3+4;

第二个是3+4+5

不过像这种用了这么多次的++的很容易出错

尽量避免用这样表示

2004-09-18 11:58
快速回复:关于递增、递减运算符
数据加载中...
 
   



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

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