C语言自增自减

求说明j的结果为什么是22... 求说明j的结果为什么是22 展开
 我来答
薛定谔看娱乐猫
2019-02-21 · 娱乐信息,独家观点,一手资讯
薛定谔看娱乐猫
采纳数:152 获赞数:442

向TA提问 私信TA
展开全部
先鄙视下教材中这种垃圾题。不同环境下值不一样的,我这里算出来等于8,24呢。

//下面这段是百度来的。
做类似(++n)运算是直接在内存中完成的,相当于是用汇编里的自加运算,直接修改内存中n的值. 因此,做第一次(++i)后,i=4,做第二个(++i)后,i=5;此时才做第一次括号外的加法,并把结果保存在临时变量中temp=10;而此时内存中的i已经是5了. 然后在做一次(++i),即i=6;此时i与临时变量temp相加,就是最终结果k=16.不信,你可再加一个(++i),此时,i=7;结果k为23.所以,这样完全可以推出它的运算机制.
追问
有点懵,我用的vc++6.0
飞向梦想飞向未来
2019-02-21 · TA获得超过179个赞
知道小有建树答主
回答量:230
采纳率:54%
帮助的人:36.3万
展开全部
这个是vc++编译器导致的,在有连续计算的时候会将部分结果存于临时内存中。
vs2008以上版本就会解决这个问题,答案会是24
追问
好吧
追答

给你一个详细的过程吧,看你还是有点懵。首先执行指令都是从右往左执行(下面的分析就是从右往左执行),当然针对你疑问,从左往右执行逻辑也一样。

1、(++i) + (++i) = 14,因为会取加数和被加数,此时++i优先级高,使得i=7,然后相加

2、(++i) + (++i) +(++i) =22,首先取最右边的两个,同1步骤结果是14,此时编译器会再次检测到+号,会将14存储在临时变量里,当前i=7,然后加上最左边的i,此时i要自加了为8,即临时变量14+8=22。

3、(++i) + (++i) +(++i) + (++i) =31,首先取最右边的两个,结果是14,此时编译器会再次检测到+号,会将14存储在临时变量里,当前i=7,然后加上左边的一个i(从左往右数第二个i),此时i要自加了,即临时变量14+8=22。编译器会再次检测到+号,即将结果22存在临时变量里,当前i=8,然后加上最左边的i,此时i要自加了为9,即临时变量22+9=31.

4、同理(++i) + (++i) +(++i) + (++i) +(++i)=10+9+8+7+7=41

5、(++i) + (++i) +(++i) + (++i) +(++i)+(++i)=11+10+9+8+7+7=52

6、xxxxxxx=12+11+10+9+8+7+7=64

7、xxxxxxxx=13+12+11+10+9+8+7+7=77

.

.

.

总结,出现以上的结果是因为在执行的指令的时候,严格按照从右往左取的逻辑,不会优先执行全部的前自加,导致当取到运算符的时候(此题运算符为+号),会将结果存在临时变量里。vs2008版本的逻辑就跟上面不一样,他会先执行完全部的前自加,然后在执行运算符号。也就是我之前说的(++i) + (++i) +(++i)=8+8+8=24

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仲甫
2019-02-21 · 知道合伙人IT服务行家
仲甫
知道合伙人IT服务行家
采纳数:206 获赞数:1890
德晨优秀员工

向TA提问 私信TA
展开全部
不同编译器的组合问题吧
i=5;
第一个i++:i=i+1,等于6
第二个i++:i=i+1,等于7
第三个i++:i=i+1,等于8
j=(++i) + (++i) + (++i)应该等于8+8+8=24;
但是编译器组合问题,就出现了21.
题主没必要纠结这种结果,本身做这个运算就没有必要,祝好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-02-21
展开全部
希望你不是考这题,因为不同的编译器就有不同的结果!
它可以是6+7+8=21
也可以是7+7+8=22
也可以是8+8+8=24
以上全都可以成立的,本来就是一个BUG
图中的结果是第一个i递增,然后第二个i递增,i这个时候变成了7
7+7=14
然后最后一次i递增,i变成了8,7+7+8=22
但是数学中应当先算括号的,也就是8+8+8=24
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
知之为知之779
2019-02-21 · TA获得超过152个赞
知道答主
回答量:113
采纳率:54%
帮助的人:20.7万
展开全部

可以参照下面链接的解释,和编译器有关,这种写法不推荐使用,理解一下原理即可。

网页链接

追问
网页链接没链接啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式