楼上的有个问题我很想不明白 为什么交换数字用 a-=b;b+=a;a=b-a; ? 无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思) 下面是int c=a;a=b;b=c;VC编译后的指令 int a=12,b=21;( g8 h6 l' `, D [" c8 y
mov dword ptr [ebp-4],0Ch
4 n5 Y6 \5 s) Y" Omov dword ptr [ebp-8],15h
& z2 w! C! }+ Q- Z: Q, Y int c=a;4 E" W* K7 W% \8 d+ _5 @" z$ I1 I
mov eax,dword ptr [ebp-4]
& C$ Y' r0 T% _mov dword ptr [ebp-0Ch],eax+ g! {* f# i; ?) P0 G$ P
a=b;5 r4 H$ \7 ~& l: E9 E
mov ecx,dword ptr [ebp-8]
, \. K- H; i2 W F1 s9 Z mov dword ptr [ebp-4],ecx
( {+ _: Z \& G: O b=c;
) b2 t/ a4 ^4 w( M+ A9 Q0 Omov edx,dword ptr [ebp-0Ch]+ o8 ~% y# h& V- g1 E- R
mov dword ptr [ebp-8],edx 下面是你的方法VC编译后的指令 a=12,b=21;
! D9 c5 s& r% G6 mmov dword ptr [ebp-4],0Ch
+ C" m: q" N0 s E2 @mov dword ptr [ebp-8],15h; }: j6 K3 x0 D3 y/ e/ _1 y/ d
a-=b;
) ~) x% v3 M. W( a2 {) v7 D6 b8 Amov eax,dword ptr [ebp-4]+ w+ `, x) T9 P! E/ U9 H/ g" Q `
sub eax,dword ptr [ebp-8]
* R6 I- s" `1 {3 [" R( J2 u3 Zmov dword ptr [ebp-4],eax
- O2 O( N T' G b+=a;/ X0 c& @2 b% W: A( H+ S1 {
mov ecx,dword ptr [ebp-8], w4 E" f+ J8 z8 Q
add ecx,dword ptr [ebp-4]
* T7 Q1 k7 G* J+ w! n; w, c# gmov dword ptr [ebp-8],ecx
! z, B3 ^8 E6 h2 j/ v% H' U a=b-a;
/ k, a3 |$ M6 F- O% _! ]mov edx,dword ptr [ebp-8]5 l1 b n. W" ?! [; j& z! [6 E5 O+ [
sub edx,dword ptr [ebp-4]
8 }2 B' t! f4 ]# ~3 [3 \- @1 v; Bmov dword ptr [ebp-4],edx3 |$ w: ~( b: Q: @8 ^7 A" I" F6 [
很明显正规方法只有8条Mov指令, 而你的方法有8条Mov指令和2条Sub指令和1条Add指令 要知道,和Mov指令比起来Sub指令,Add指令是很费时间的! |