关于i++和i-- 的问题
本帖最后由 肖凯文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的顺序排列不同导致的结果就差别那么大呢 肖凯文kevin 发表于 2012-3-4 11:44 static/image/common/back.gif
看样子我要跳过这个问题了,还是无法理解为什么会是这样的结果,特别是不明白第四个为什么是9,现在似乎连 ...
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--);
}
这样明白不? 呵呵。教你简单的一个理解。看数在哪边。数在前边就先自增减,再去运算
数在后面就先运算,再自增减;P 围观看看,:loveliness: 从调试的结果来看_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这是汇编源代码 本帖最后由 嗜血灵异狂 于 2012-3-4 06:48 编辑
我没有VC6.0++不能进行那种反编译
我只能告诉你inc是自增dec是自减 neg是原码取反低字节 (换成二进制)就是负数 我也想起来了小甲鱼也曾经再一个视频中讲过 这中++--运算符号再没中编译器调试结果都不一样的 你只要知道关系运算符号的优先次序就行了 等等吧!!!!!!!!!!! 第一个输出9,++i,先把i自增,再取值;--i同理。i++先取i值,再自增,以下同理!不懂可以再问~_~ 岁〆月有√声 发表于 2012-3-4 11:16 static/image/common/back.gif
第一个输出9,++i,先把i自增,再取值;--i同理。i++先取i值,再自增,以下同理!不懂可以再问~_~
看样子我要跳过这个问题了,还是无法理解为什么会是这样的结果,特别是不明白第四个为什么是9,现在似乎连第一个为什么是9我也不知道了,还是继续去看小甲鱼的视频了。 岁〆月有√声 发表于 2012-3-3 23:53 static/image/common/back.gif
void main()
{
int i=8;
终于明白了,每次都调用上次的i值,只记得先printf,却忘记了printf后还要加或者减得,真是粗心啊,感谢前辈的耐心讲解啊。为什么每次的printf都要用上次的i值呢? 肖凯文kevin 发表于 2012-3-4 12:29 static/image/common/back.gif
终于明白了,每次都调用上次的i值,只记得先printf,却忘记了printf后还要加或者减得,真是粗心啊,感谢前 ...
假设
i=2
++i是先把i+1赋值给i然后再输出3
下一次再调用i时i=3
i++是先输出2再把i+1赋值给i
下一次再调用i时i=3 看样子我要跳过这个问题了,还是无法理解为什么会是这样的结果,特别是不明白第四个为什么是9,现在似乎连第一个为什么是9我也不知道了,还是继续去看小甲鱼的视频了。
页:
[1]