鱼C论坛

 找回密码
 立即注册
查看: 2319|回复: 3

关于printf和++ --的问题

[复制链接]
发表于 2012-2-26 23:20:03 | 显示全部楼层 |阅读模式

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

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

x
int i=8;
        printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n",i,++i,--i,++i,i--,-i++,-i--);
结果为什么是9,9,8,9,8,-8,-8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-28 10:34:00 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-2-28 10:38 编辑

这个 我看起来费劲 发上来你自己看看吧
#include <stdio.h>
void main()
{
int i=8;
        printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n",i,++i,--i,++i,i--,-i++,-i--);
}

下面是关键部分汇编代码(全部的我就不发了太长了!~)

CONST SEGMENT
??_C@_0BG@KAOE@?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$AA@ DB '%'
DB 'd', 0aH, '%d', 0aH, '%d', 0aH, '%d', 0aH, '%d', 0aH, '%d', 0aH
DB '%d', 0aH, 00H    ; `string'
CONST ENDS
; COMDAT _main
_TEXT SEGMENT
_i$ = -4
_main PROC NEAR     ; COMDAT
; File D:\Media\1246\1.c
; Line 3
push ebp
mov ebp, esp
sub esp, 80     ; 00000050H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-80]
mov ecx, 20     ; 00000014H
mov eax, -858993460    ; ccccccccH
rep stosd
; Line 4
mov DWORD PTR _i$[ebp], 8
; Line 5
mov eax, DWORD PTR _i$[ebp]
neg eax ;NEG是汇编指令中的求补指令,NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数。求补运算也可以表达成:将操作数按位取反后加1; ;
;;  格式:NEG OPR   执行的操作:(OPR)<-- —(OPR)[1]   亦即把操作数按位求反后末位加1,因而执行的操作也可表示为:   (OPR)<-- 0FFFFH — (OPR) + 1 ;
;;  NEG指令对标志的影响与用零作减法的SUB指令一样。 ;
mov DWORD PTR -8+[ebp], eax
mov ecx, DWORD PTR -8+[ebp]
push ecx
mov edx, DWORD PTR _i$[ebp]
neg edx
mov DWORD PTR -12+[ebp], edx
mov eax, DWORD PTR -12+[ebp]
push eax
mov ecx, DWORD PTR _i$[ebp]
mov DWORD PTR -16+[ebp], ecx
mov edx, DWORD PTR -16+[ebp]
push edx
mov eax, DWORD PTR _i$[ebp]
add eax, 1
mov DWORD PTR _i$[ebp], eax
mov ecx, DWORD PTR _i$[ebp]
push ecx
mov edx, DWORD PTR _i$[ebp]
sub edx, 1
mov DWORD PTR _i$[ebp], edx
mov eax, DWORD PTR _i$[ebp]
push eax
mov ecx, DWORD PTR _i$[ebp]
add ecx, 1
mov DWORD PTR _i$[ebp], ecx
mov edx, DWORD PTR _i$[ebp]
push edx
mov eax, DWORD PTR _i$[ebp]
push eax
push OFFSET FLAT:??_C@_0BG@KAOE@?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$AA@ ; `string'
mov ecx, DWORD PTR _i$[ebp]
sub ecx, 1
mov DWORD PTR _i$[ebp], ecx
mov edx, DWORD PTR _i$[ebp]
add edx, 1
mov DWORD PTR _i$[ebp], edx
mov eax, DWORD PTR _i$[ebp]
sub eax, 1
mov DWORD PTR _i$[ebp], eax
call _printf
add esp, 32     ; 00000020H
; Line 6
pop edi
pop esi
pop ebx
add esp, 80     ; 00000050H
cmp ebp, esp
call __chkesp
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-2 19:14:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-3 01:13:18 | 显示全部楼层
看看是怎么解决这个问题的,学习中~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 20:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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