鱼C论坛

 找回密码
 立即注册
查看: 3292|回复: 11

自增自减

[复制链接]
发表于 2016-5-31 21:21:22 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

void main()
{
        int x = 8, y = 9, p, q, i = 5, ;

        p = (x++) + (y++) + (x++);
        printf("%d\n", x);
        q = (++x) + (++x) + (++x);
        printf("%d, %d, %d, %d, %d\n", p, q, x, y, i);
        printf("%d\n", i);
}
结果:
10
25, 37, 13, 10, 5
5
Press any key to continue
这个结果我感觉不对啊,q=37怎么来的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-31 22:10:15 | 显示全部楼层
有点疑惑

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

使用道具 举报

发表于 2016-6-1 09:08:17 | 显示全部楼层
在别的游戏里,像我这么帅的,一般都是主角哟~~~

Debug 模式
26:           q = (++x) + (++x) + (++x);
0040D785   mov         edx,dword ptr [ebp-4]
0040D788   add         edx,1
0040D78B   mov         dword ptr [ebp-4],edx
0040D78E   mov         eax,dword ptr [ebp-4]
0040D791   add         eax,1
0040D794   mov         dword ptr [ebp-4],eax
0040D797   mov         ecx,dword ptr [ebp-4]
0040D79A   add         ecx,dword ptr [ebp-4]
0040D79D   mov         edx,dword ptr [ebp-4]
0040D7A0   add         edx,1
0040D7A3   mov         dword ptr [ebp-4],edx
0040D7A6   add         ecx,dword ptr [ebp-4]
0040D7A9   mov         dword ptr [ebp-10h],ecx

解析:x = 10;
1. ++x -> x = 11;
2. ++x -> x = 12;
3. x+x -> 计算前两个x的计算结果 = 24
4. ++x -> x = 13;
5. 所有结果汇总:: 24 + 13 = 37


Release 模式
【最快速度】/【最小大小】
00401000 >push    0A                               ; /<%d> = A (10.)
00401002  push    00408044                         ; |format = "%d",LF,""
00401007  call    printf                           ; \printf
0040100C  add     esp, 8
0040100F  push    5                                ; /<%d> = 5
00401011  push    0A                               ; |<%d> = A (10.)
00401013  push    0D                               ; |<%d> = D (13.)
00401015  push    27                               ; |<%d> = 27 (39.)
00401017  push    19                               ; |<%d> = 19 (25.)
00401019  push    00408030                         ; |format = "%d, %d, %d, %d, %d",LF,""
0040101E  call    printf                           ; \printf
00401023  add     esp, 18
00401026  push    5                                ; /<%d> = 5
00401028  push    00408044                         ; |format = "%d",LF,""
0040102D  call    printf                           ; \printf
00401032  add     esp, 8
00401035  retn

解析:解析你妹啊!Release版本直接把结果出来了,没有计算过程的好伐?! q是39啊,自己脑补 -_- (提示:先完成三个自增后加运算)
【默认】
26:           q = (++x) + (++x) + (++x);
00401053   mov         edx,dword ptr [x]
00401056   add         edx,1
00401059   mov         dword ptr [x],edx
0040105C   mov         eax,dword ptr [x]
0040105F   add         eax,1
00401062   mov         dword ptr [x],eax
00401065   mov         ecx,dword ptr [x]
00401068   add         ecx,dword ptr [x]
0040106B   mov         edx,dword ptr [x]
0040106E   add         edx,1
00401071   mov         dword ptr [x],edx
00401074   add         ecx,dword ptr [x]
00401077   mov         dword ptr [q],ecx

解析:这个跟Debug模式一样,没有啥优化。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-6-1 23:01:33 | 显示全部楼层
大神就是不一样,,,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-1 23:41:51 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-1 23:43:52 | 显示全部楼层
看汇编代码,这是编译器的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-2 02:43:12 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-2 22:30:47 | 显示全部楼层
本帖最后由 香蕉你个不娜娜 于 2016-6-2 22:36 编辑

我还是不懂24是怎么来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-7 12:24:42 | 显示全部楼层
学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-7 12:29:16 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-7 12:44:05 | 显示全部楼层
为什么我觉得q == 11 + 12 + 13 ==36
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-9 19:15:41 | 显示全部楼层
纠结这个没有意义,不同的编译器结果不同(书上说的),以后的开发中不要使用这样的代码,除非你不想自己的程序可移植
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 09:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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