鱼C论坛

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

关于i++和i-- 的问题

[复制链接]
发表于 2012-3-3 23:53:40 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 肖凯文kevin 于 2012-3-3 23:58 编辑

#include <stdio.h>

void main()
{
        int i=8;
        printf("%d\n",++i);
        printf("%d\n",--i);
        printf("%d\n",i++);
        printf("%d\n",i--);
        printf("%d\n",-i++);
        printf("%d\n",-i--);
}
希望前辈能给我解释清楚这个i++  和i--的问题,其实++i和--i也不是很理解,麻烦前辈赐教了。
为什么这几个ptintf的顺序排列不同导致的结果就差别那么大呢

最佳答案

查看完整内容

void main() { int i=8; printf("%d\n",++i);//先i++,即i=8+1;再printf(i)=9 printf("%d\n",--i);//这里先自减,即i=9-1;再printf(i)=8 printf("%d\n",i++);//这里呢,先printf(i),所以输出8,然后再自增嘛,i=9了。 printf("%d\n",i--);//这里同上,就是先printf(i)了...后自减,以下都差不多~ printf("%d\n",-i++); printf("%d\n",-i--); } 这样明白不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-3 23:53:41 | 显示全部楼层

void main()
{
        int i=8;
        printf("%d\n",++i);//先i++,即i=8+1;再printf(i)=9
        printf("%d\n",--i);//这里先自减,即i=9-1;再printf(i)=8
        printf("%d\n",i++);//这里呢,先printf(i),所以输出8,然后再自增嘛,i=9了。
        printf("%d\n",i--);//这里同上,就是先printf(i)了...后自减,以下都差不多~
        printf("%d\n",-i++);
        printf("%d\n",-i--);
}
这样明白不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-4 00:14:53 | 显示全部楼层
呵呵。教你简单的一个理解。看数在哪边。数在前边就先自增减,再去运算
数在后面就先运算,再自增减;P
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-4 01:09:34 | 显示全部楼层
围观看看,:loveliness:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-4 06:05:25 | 显示全部楼层
360截图20120304055949031.jpg 从调试的结果来看_main        proc        far
        push        si
;        ?debug        L 5
        mov        si,8
;        ?debug        L 6
        inc        si
        mov        ax,si
        push        ax
        mov        ax,offset DGROUP:s@
        push        ax
        call        far ptr _printf
        pop        cx
        pop        cx
;        ?debug        L 7
        dec        si
        mov        ax,si
        push        ax
        mov        ax,offset DGROUP:s@
        push        ax
        call        far ptr _printf
        pop        cx
        pop        cx
;        ?debug        L 8
        mov        ax,si
        inc        si
        push        ax
        mov        ax,offset DGROUP:s@
        push        ax
        call        far ptr _printf
        pop        cx
        pop        cx
;        ?debug        L 9
        mov        ax,si
        dec        si
        push        ax
        mov        ax,offset DGROUP:s@
        push        ax
        call        far ptr _printf
        pop        cx
        pop        cx
;        ?debug        L 10
        mov        ax,si
        inc        si
        neg        ax
        push        ax
        mov        ax,offset DGROUP:s@
        push        ax
        call        far ptr _printf
        pop        cx
        pop        cx
;        ?debug        L 11
        mov        ax,si
        dec        si
        neg        ax
        push        ax
        mov        ax,offset DGROUP:s@
        push        ax
        call        far ptr _printf
        pop        cx
        pop        cx
;        ?debug        L 12
        call        far ptr _getch
@1:
;        ?debug        L 13
        pop        si
        ret       
_main        endp
1_TEXT        ends
        ?debug        C E9
_DATA        segment word public 'DATA'
s@        label        byte
        db        37
        db        100
        db        10
        db        0
_DATA        ends
        extrn        _printf:far
        extrn        _getch:far
1_TEXT        segment        byte public 'CODE'
1_TEXT        ends
        public        _main
        end  这是汇编源代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-4 06:19:59 | 显示全部楼层
本帖最后由 嗜血灵异狂 于 2012-3-4 06:48 编辑

我没有VC6.0++  不能进行那种反编译  
  我只能告诉你  inc是自增  dec是自减   neg是原码取反低字节 (换成二进制)就是负数       我也想起来了  小甲鱼也曾经再一个视频中讲过 这中++  --运算符号再没中编译器调试结果都不一样的   你只要知道关系运算符号的优先次序就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-4 09:34:19 | 显示全部楼层
等等吧!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-4 11:16:41 | 显示全部楼层
第一个输出9,++i,先把i自增,再取值;--i同理。i++先取i值,再自增,以下同理!不懂可以再问~_~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-4 11:44:11 | 显示全部楼层
岁〆月有√声 发表于 2012-3-4 11:16
第一个输出9,++i,先把i自增,再取值;--i同理。i++先取i值,再自增,以下同理!不懂可以再问~_~

看样子我要跳过这个问题了,还是无法理解为什么会是这样的结果,特别是不明白第四个为什么是9,现在似乎连第一个为什么是9我也不知道了,还是继续去看小甲鱼的视频了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-4 12:29:54 | 显示全部楼层
岁〆月有√声 发表于 2012-3-3 23:53
void main()
{
        int i=8;

终于明白了,每次都调用上次的i值,只记得先printf,却忘记了printf后还要加或者减得,真是粗心啊,感谢前辈的耐心讲解啊。为什么每次的printf都要用上次的i值呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-4 16:25:20 | 显示全部楼层
肖凯文kevin 发表于 2012-3-4 12:29
终于明白了,每次都调用上次的i值,只记得先printf,却忘记了printf后还要加或者减得,真是粗心啊,感谢前 ...

假设
i=2
++i是先把i+1赋值给i然后再输出3
下一次再调用i时i=3
i++是先输出2再把i+1赋值给i
下一次再调用i时i=3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-11 17:27:39 | 显示全部楼层
看样子我要跳过这个问题了,还是无法理解为什么会是这样的结果,特别是不明白第四个为什么是9,现在似乎连第一个为什么是9我也不知道了,还是继续去看小甲鱼的视频了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 19:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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