楼上的有个问题我很想不明白 为什么交换数字用 a-=b;b+=a;a=b-a; ? 无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思) 下面是int c=a;a=b;b=c;VC编译后的指令 int a=12,b=21;+ b% T. s9 ?- R) C! u
mov dword ptr [ebp-4],0Ch3 i g8 g) e W! L n# b% o7 D& ?
mov dword ptr [ebp-8],15h
8 A; i1 y* @* _; R5 i int c=a;
' j+ \: V/ \1 w, B6 tmov eax,dword ptr [ebp-4]6 m1 `4 b4 ~+ x6 N8 ~; c4 N" ~) c" B
mov dword ptr [ebp-0Ch],eax
' X3 Z% o4 W7 r; A4 b a=b;
, c2 X- H/ S7 Z6 j mov ecx,dword ptr [ebp-8]
3 c1 H: I- [* e) V: } mov dword ptr [ebp-4],ecx% A) p4 |9 c5 M# q, H
b=c;
: D3 h0 y) t; l Hmov edx,dword ptr [ebp-0Ch]8 B# ~' ~: P9 C
mov dword ptr [ebp-8],edx 下面是你的方法VC编译后的指令 a=12,b=21;6 @7 _1 ^. p; x3 l+ q" B" A( \
mov dword ptr [ebp-4],0Ch# P* N( ?3 K+ X8 ^
mov dword ptr [ebp-8],15h
; Q# [ N5 ~6 Y9 }5 p. t a-=b;' B! e+ q# R5 N1 R! }. s
mov eax,dword ptr [ebp-4]+ b1 r$ B. N2 q% Y$ n9 O* ^( n
sub eax,dword ptr [ebp-8]
! {# |) `& j$ _ H" Dmov dword ptr [ebp-4],eax/ J8 K) q0 A7 T7 r, x
b+=a;
7 f* P- r; Z& ~ u, a3 N/ D& e1 Qmov ecx,dword ptr [ebp-8]
' e Z% w8 L0 e4 O# S" J2 ]add ecx,dword ptr [ebp-4]
7 o1 N: b$ V# wmov dword ptr [ebp-8],ecx
A, L0 u6 r6 } a=b-a;
Y( e% T) {7 D* B0 }mov edx,dword ptr [ebp-8]. M9 B+ P( ^9 S( b/ j
sub edx,dword ptr [ebp-4]5 b0 z4 O. U+ i* g$ z W: w
mov dword ptr [ebp-4],edx4 T5 c" x+ E9 O# J: f7 b/ R
很明显正规方法只有8条Mov指令, 而你的方法有8条Mov指令和2条Sub指令和1条Add指令 要知道,和Mov指令比起来Sub指令,Add指令是很费时间的! |