鱼C论坛

 找回密码
 立即注册
查看: 4252|回复: 6

c语言自增自减运算符问题

[复制链接]
发表于 2012-3-26 22:27:40 | 显示全部楼层 |阅读模式

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

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

x
刚刚看了视频卡住了,在百度也没有搜到
#include <stdio.h>
void main()
{
   int a,b;
   a = 3;
   b = (++a)+(++a);
   printf("%d\n%d\n",a,b);

}
结果为什么等于5,10呢,5我明白,10就不明白了,我想的结果是9,还有
如果把b=(++a)+(++a)+(++a)结果是16,为什么啊?


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-26 22:32:16 | 显示全部楼层
+++++++++++++++++++++++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-27 13:49:27 | 显示全部楼层
b = (++a)+(++a);

这个是先算(++a)+(++a) 是4+5 ;

但是,由于4<5 计算机会把4变成5 ;

故、结果为10 。

So、你明白不 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-27 20:43:22 | 显示全部楼层
我会了,谢谢,但是不是你这样解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-28 15:16:53 | 显示全部楼层
在同一个句子里面不要使用这么多的自增和自减,前缀自增就是先+1后执行,后缀自增就是先执行后+1,至于判定的地方,一般是在一个表达式后面的逗号或者是分号后面执行后缀自增。但是有的地方说不清楚,不同的系统和不同的编译器都不好说。
至于本题目里面,b的值其实很不确定,我的系统用vc++6.0算出来的是10,但是有的可能是9。在同一个语句里面预算一个变量两次自增以上就不好确定值了,因为你不知道系统是从左到右运算还是从右向左运算。
楼主尽量不要用这种方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-28 16:56:54 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-28 17:05 编辑

这++  -- 真 让人头痛

汇编大妈查看如下

5:       a = 3;                    这里存放a的值
00401028   mov         dword ptr [ebp-4],3   这是赋值   a=3

6:       b = (++a)+(++a);
                        这里暂时存放前一个a的值  
0040102F   mov         eax,dword ptr [ebp-4]  
00401032   add         eax,1                           这里将 a自增
00401035   mov         dword ptr [ebp-4],eax  自增后的结果给a   a=4
                         这里暂时存放后一个a的值
00401038   mov         ecx,dword ptr [ebp-4]  
0040103B   add         ecx,1                           这里后面的a 自增
0040103E   mov         dword ptr [ebp-4],ecx  自增结果 给后面的a = 5

                 这里统一前后两个a的值 ( a的值取最后一次得出的a的值)
00401041   mov         edx,dword ptr [ebp-4]     这里将   a 统一等于5 参与运算
00401044   add         edx,dword ptr [ebp-4]    a+a

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2022-8-9 16:23:47 From FishC Mobile | 显示全部楼层
莫名其妙 发表于 2012-3-28 16:56
这++  -- 真 让人头痛

汇编大妈查看如下

懂了,谢谢指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-28 20:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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