楼上的有个问题我很想不明白 为什么交换数字用 a-=b;b+=a;a=b-a; ? 无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思) 下面是int c=a;a=b;b=c;VC编译后的指令 int a=12,b=21;' Y/ v$ |; U z/ C1 A
mov dword ptr [ebp-4],0Ch& B" \! E k+ }9 i, C
mov dword ptr [ebp-8],15h
: h% ]/ o0 P8 [& f1 H8 J; ]% `+ s int c=a;' G3 W0 P! ?- K* b
mov eax,dword ptr [ebp-4]4 u% J" B, K3 J+ v' P$ f
mov dword ptr [ebp-0Ch],eax" H( h! O9 A4 U+ \
a=b;1 k& L. k4 B/ k
mov ecx,dword ptr [ebp-8]
* U, J( q. L& _& a9 `# L3 m mov dword ptr [ebp-4],ecx0 Z4 [# l7 O* z7 K% W- S, w
b=c;
* ~7 R3 W0 [$ r/ F3 ]' x4 ~mov edx,dword ptr [ebp-0Ch]4 @2 P" v7 @$ l8 I2 M0 y9 Q# F3 V
mov dword ptr [ebp-8],edx 下面是你的方法VC编译后的指令 a=12,b=21;% S8 d0 ^" a& d
mov dword ptr [ebp-4],0Ch
# V6 t4 x3 r; ?( s8 d# E& R' Xmov dword ptr [ebp-8],15h1 e- F: S% k9 u* T3 v) O5 r
a-=b;
' y7 Q% U2 M. Z2 ^7 `* e2 R. bmov eax,dword ptr [ebp-4]
: p. }8 u* V Ssub eax,dword ptr [ebp-8]! i t# `7 U$ ~' h! e9 ?% F/ u; h) p
mov dword ptr [ebp-4],eax
9 ]4 s6 G J! w, e b+=a;& X. y& h% g& k# ^- V, W0 U% b4 r$ j0 m0 r
mov ecx,dword ptr [ebp-8]; Q: F& N7 c: k
add ecx,dword ptr [ebp-4]9 N- n, B7 h1 U! R
mov dword ptr [ebp-8],ecx
7 ]% d+ Y. C5 g* ]0 J% L" ^- A' |" ^ a=b-a;
' Q- Z& \1 R5 g9 \ F4 `! Smov edx,dword ptr [ebp-8]
% N6 r( ` ]% I' \ @" K+ H! L3 ssub edx,dword ptr [ebp-4]
! M7 I; x( C# }mov dword ptr [ebp-4],edx/ j' H4 u& H* l6 f" n
很明显正规方法只有8条Mov指令, 而你的方法有8条Mov指令和2条Sub指令和1条Add指令 要知道,和Mov指令比起来Sub指令,Add指令是很费时间的! |