楼上的有个问题我很想不明白 为什么交换数字用 a-=b;b+=a;a=b-a; ? 无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思) 下面是int c=a;a=b;b=c;VC编译后的指令 int a=12,b=21;7 q5 m0 I& z5 u' B) h0 n1 b3 L
mov dword ptr [ebp-4],0Ch+ Q, w$ O6 C1 {0 U
mov dword ptr [ebp-8],15h
$ J8 q' U2 U8 z/ K int c=a;( ~1 p5 K7 a, y$ z" D
mov eax,dword ptr [ebp-4]8 ?: a! |% w2 Z _) R9 X/ N
mov dword ptr [ebp-0Ch],eax
. ^) R+ Z1 {8 a- K" O" _$ U a=b;
T, q" x9 d6 K9 @' P mov ecx,dword ptr [ebp-8]9 E+ Q: Q& k( P
mov dword ptr [ebp-4],ecx
4 a0 X: O1 l% x- o' a) T; a% u b=c;6 X, P) K- Q8 O( C2 m: t9 |; l+ I* W. {
mov edx,dword ptr [ebp-0Ch]6 N; G6 u! O4 E9 a) a- O
mov dword ptr [ebp-8],edx 下面是你的方法VC编译后的指令 a=12,b=21;
N4 x7 k5 A8 h% rmov dword ptr [ebp-4],0Ch
' }" F$ v7 c4 O( y8 N0 h7 Hmov dword ptr [ebp-8],15h
$ y+ m* O2 ]' s. W1 |' [! v! Z9 S6 q a-=b;
) Z |& s' Z1 P5 Kmov eax,dword ptr [ebp-4]
4 q9 X+ x8 U9 {+ e& Qsub eax,dword ptr [ebp-8]* Z1 D+ \+ m0 ^; f! h) F+ X2 e
mov dword ptr [ebp-4],eax
3 E7 F7 C& F# F5 w& W b+=a;
: E# Z' n& l* y& L3 D! @mov ecx,dword ptr [ebp-8]
8 Y4 J1 m) J! B6 ?, K! [2 [add ecx,dword ptr [ebp-4]+ a# t1 [' w. F
mov dword ptr [ebp-8],ecx
$ ~6 a+ ?5 ^4 ]+ Q6 Z6 y a=b-a;5 \& P# A( G( K6 L" I+ {
mov edx,dword ptr [ebp-8]8 D, f. O& m7 {5 }- c5 q- b8 _; z
sub edx,dword ptr [ebp-4]. h2 R+ Z# O- n
mov dword ptr [ebp-4],edx
1 ?- {2 G$ ]$ l) z N$ ?4 \7 O6 ^+ ?! a 很明显正规方法只有8条Mov指令, 而你的方法有8条Mov指令和2条Sub指令和1条Add指令 要知道,和Mov指令比起来Sub指令,Add指令是很费时间的! |