鱼C论坛

 找回密码
 立即注册
查看: 2618|回复: 5

自加自减的运算

[复制链接]
发表于 2012-1-21 14:13:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
i=5,那么(++i)+(++i)+(++i)为几?????答案是22!!为什么??
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-21 14:32:10 | 显示全部楼层
各种编译器结果不同,下面是我用VS2010反汇编的结果:
004113C5  mov         eax,dword ptr [i]  
004113C8  add         eax,1  
004113CB  mov         dword ptr [i],eax  
//这3句为将i+1
004113CE  mov         ecx,dword ptr [i]  
004113D1  add         ecx,1  
004113D4  mov         dword ptr [i],ecx  
//同上
004113D7  mov         edx,dword ptr [i]  
004113DA  add         edx,1  
004113DD  mov         dword ptr [i],edx  
//同上
004113E0  mov         eax,dword ptr [i]  
004113E3  add         eax,dword ptr [i]  
004113E6  add         eax,dword ptr [i]  
//将加3次后的i加起来
004113E9  mov         dword ptr [j],eax  
//赋给j
所以结果是24
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-21 14:34:20 | 显示全部楼层

加入QQ群可以提问:205451837
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-24 21:13:28 | 显示全部楼层
此问题我也很纳闷,安我自己的理解,应该是21,可程序算出来是22.
下面是找的别人的解释:
貌似在不同的运行环境下,自增自减运算是有细微差别的,VC6.0算出来就是22.
一般情况下,自增自减的扫描顺序是从左到右。对于前增减(++i),是以一个运算符为单位进行增减;而后增减(i++)则是以整个表达式为单位最后统一增减。
    例1:i=5;b=(++i)+(++i)+(++i);结果b=22。
分析:首先扫描求解前半部分,即(++i)+(++i)的值(先对i进行两次自增运算,i的值变为7,再计算i+i 的值为7+7=14),然后再求解后半部分,即14+(++i)的值(先对变量i自增1次,i的值变为8,再计算14+8=22)。
有没有其它童鞋给出其它的解释?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-24 21:34:26 | 显示全部楼层
想学习 谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-1-29 21:31:28 | 显示全部楼层
谢谢大家哈
:loveliness:
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-10 22:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表