| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1476 人关注过本帖, 1 人收藏
标题:自加自减运算出问题!
只看楼主 加入收藏
wangdan17
Rank: 1
来 自:天下无双
等 级:新手上路
威 望:2
帖 子:321
专家分:0
注 册:2008-11-28
结帖率:83.33%
收藏(1)
 问题点数:0 回复次数:10 
自加自减运算出问题!
程序代码:
#include <stdio.h>
main()
{
int j=5,q;
q=(++j)+(++j)+(++j);
printf("%d,%d",q,j);
}

最后q和j的值最后是多少?
书上说最后结果,q=24,j=8
可我运行出来的不是这样的结果;
j=8不错,可q却=22。
谁给我解释一下计算过程好吗?
搜索更多相关主题的帖子: 运算 
2008-12-06 19:53
OneMan
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2008-12-5
收藏
得分:0 
邪恶X86  19:55:39
++和——是带有副作用的运算符。建议读者不要在一个表达式中对同一变量多次使用这样的运算符,可能会发生意想不到的结果。如i的值为4,对表达式

  (i++)+(i++)

  可能认为它的值为 9(+5)。然而在 TURBO C和MS C系统中,它的值为8.而表达式

  (++i)+(++i)

  的值为12.这是因为这些系统在处理 i++时,先使用 i的原值计算整个表达式,然后再让i连续两次自增;处理++i时,在计算表达式值之前,先对 i执行两次自增,然后才计算表达式。放前一个表达式的值为8,后一个表达式的值为12.

  因+与++(-与——类似)是两个不同运算符,对于类似表达式i+++j会有不同的理解:(i++)+ j或i+(++j)。 C编译的处理方法是自左至右让尽可能多的字符组成一个合法的句法单位(如标识符、数字、运算符等)。因此,i+++j被解释成(i++)+j,而不是i+(++j)。

  增1(++)和减1(——)运算符的结合方向是自右至左的。
邪恶X86  19:56:34
你那道题在VC中 是先把 j自增了2次 7+7=14 J在自增了1次 14+8=22


这个问题我也想了很久想不明白,所以我问了下高手,嘿嘿,你看看吧
2008-12-06 20:04
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
写书的人用的编译器和你用的不一样,
结果就不一样。
所以这种代码是有歧义的。
出于对自己对机器负责任的原因,我们希望大家不学,不写,不讨论有歧义的代码。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-12-06 20:06
wangdan17
Rank: 1
来 自:天下无双
等 级:新手上路
威 望:2
帖 子:321
专家分:0
注 册:2008-11-28
收藏
得分:0 
其实我也觉得这种代码不是必要的时候不要用,我只是发觉做出来的结果和书上说的结果存在分歧,所以来请教一下!

[[it] 本帖最后由 wangdan17 于 2008-12-6 20:36 编辑 [/it]]

悄悄地我走了,正如我悄悄地來。我揮一揮匕首,不留下一個活口!
2008-12-06 20:29
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
是必要的时候就更不能用,也就是说绝对不要用。
如果你在嫦娥n号的导航系统里面用了这样的代码,那么它可能飞向月亮,也可能飞向火星,当然最可能的是坠毁。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-12-06 20:42
wangdan17
Rank: 1
来 自:天下无双
等 级:新手上路
威 望:2
帖 子:321
专家分:0
注 册:2008-11-28
收藏
得分:0 
你的意思是不是说:这种东西是不是等于用不着。只是它在C语言中存在而已。难道就没有用得着它的地方吗?

悄悄地我走了,正如我悄悄地來。我揮一揮匕首,不留下一個活口!
2008-12-06 20:44
long198668
Rank: 1
来 自:河南--开封
等 级:新手上路
帖 子:53
专家分:0
注 册:2008-5-8
收藏
得分:0 
你用WINTC 就是24了 编译器不一样 运行结果也就不一样
2008-12-06 20:45
wangdan17
Rank: 1
来 自:天下无双
等 级:新手上路
威 望:2
帖 子:321
专家分:0
注 册:2008-11-28
收藏
得分:0 
如果是编译器的问题,那么就是说这种东西的副作用很大,还是不要用得好

悄悄地我走了,正如我悄悄地來。我揮一揮匕首,不留下一個活口!
2008-12-06 20:49
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
这句话说到点上了。
准确地说C语言里面存在的是++、--这些运算符,
而对于在同一个表达式里面对同一个变量多次应用这种运算符的运算法则在C语言里并不存在。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-12-06 20:50
wangdan17
Rank: 1
来 自:天下无双
等 级:新手上路
威 望:2
帖 子:321
专家分:0
注 册:2008-11-28
收藏
得分:0 
嗯```感谢大家的指导

悄悄地我走了,正如我悄悄地來。我揮一揮匕首,不留下一個活口!
2008-12-06 20:56
快速回复:自加自减运算出问题!
数据加载中...
 
   



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

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