楼上的有个问题我很想不明白 为什么交换数字用 a-=b;b+=a;a=b-a; ? 无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思) 下面是int c=a;a=b;b=c;VC编译后的指令 int a=12,b=21;1 a3 M& r! {( X' h1 e, c
mov dword ptr [ebp-4],0Ch
2 y: c4 Y9 H, T# f4 N9 [# imov dword ptr [ebp-8],15h3 v2 ]( I" H' A; Q1 D# U I
int c=a;5 s+ @# k" s* G$ o$ c7 m, @5 z5 y( ?
mov eax,dword ptr [ebp-4]
5 F/ B3 m" ~6 j% Z' B. x" Wmov dword ptr [ebp-0Ch],eax
! L2 W* o; z5 O+ o7 @$ ` a=b;
( ?( Y. O- W# ~2 ?6 F6 q mov ecx,dword ptr [ebp-8]
, a6 k: R1 |0 q7 E$ S3 r: `( P mov dword ptr [ebp-4],ecx# S" R4 F, O- I5 R3 R u
b=c;0 b. y9 b0 F" V! R7 f
mov edx,dword ptr [ebp-0Ch]
( ^& j4 X, ?# t: A' `% ]: {mov dword ptr [ebp-8],edx 下面是你的方法VC编译后的指令 a=12,b=21;7 ~& f7 t5 l% {# X8 p+ i
mov dword ptr [ebp-4],0Ch
% t" ~+ B: m t. \3 M. Amov dword ptr [ebp-8],15h
9 w8 f; i- H3 A+ t$ p( G! t a-=b;
% N4 Y5 s, c: p+ `6 [mov eax,dword ptr [ebp-4]
+ [/ D2 I1 c& dsub eax,dword ptr [ebp-8] n( y! G& w; z1 ^
mov dword ptr [ebp-4],eax4 M; j7 g. V8 g9 q3 U7 j
b+=a;
$ ]8 w7 M: J7 t2 I" x. @mov ecx,dword ptr [ebp-8]
9 a: \' {; L4 E& |4 K: @0 e: @add ecx,dword ptr [ebp-4]
/ n% c, E2 G+ umov dword ptr [ebp-8],ecx$ ^2 n3 ?) g/ |5 C4 P" ^$ g' n
a=b-a;! V4 ~* H3 W! |( p
mov edx,dword ptr [ebp-8]* g1 B. x# ^5 D' d
sub edx,dword ptr [ebp-4]& [1 V: d8 t3 y* P7 M3 c7 _& t
mov dword ptr [ebp-4],edx" ]2 s$ N* \5 k+ e6 p3 G0 ~, u
很明显正规方法只有8条Mov指令, 而你的方法有8条Mov指令和2条Sub指令和1条Add指令 要知道,和Mov指令比起来Sub指令,Add指令是很费时间的! |