楼上的有个问题我很想不明白 为什么交换数字用 a-=b;b+=a;a=b-a; ? 无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思) 下面是int c=a;a=b;b=c;VC编译后的指令 int a=12,b=21;+ C! G; z$ a/ @' ]9 A1 H5 J
mov dword ptr [ebp-4],0Ch
1 {3 @2 L; j9 y- H) wmov dword ptr [ebp-8],15h" T* ]: U7 Z6 @4 \, G7 o* O+ r/ p Z
int c=a;+ P' G0 b+ O/ l" I8 |2 ^
mov eax,dword ptr [ebp-4]
. O) K9 w) G `' m2 Xmov dword ptr [ebp-0Ch],eax" T( s1 t: i1 ?( a2 a/ b6 {
a=b;
& p# z. p I- i+ D2 h5 @" t+ e I mov ecx,dword ptr [ebp-8]# m8 Z6 e4 u& V: z& Z2 n- s
mov dword ptr [ebp-4],ecx. V1 y" d3 o% c+ l
b=c;$ b$ S$ ~1 j1 `9 v
mov edx,dword ptr [ebp-0Ch]
( ^ J. L" ^9 d2 C( }4 v# ~) xmov dword ptr [ebp-8],edx 下面是你的方法VC编译后的指令 a=12,b=21;7 D' p& q0 G4 U" w
mov dword ptr [ebp-4],0Ch
% t4 ?) c+ k0 }; q% c6 umov dword ptr [ebp-8],15h7 R* z7 J1 ?: T& l5 O( X
a-=b;
8 U. {: T( ^. L( |$ c! hmov eax,dword ptr [ebp-4]: G2 I6 v! A4 c/ X8 u# A4 @% k9 Y
sub eax,dword ptr [ebp-8]
( @9 ^5 s6 m5 W; }mov dword ptr [ebp-4],eax
- b7 {* x6 u( r3 q0 |5 A b+=a;& w5 t, I+ R1 y. n
mov ecx,dword ptr [ebp-8]
) h$ m/ X/ k9 z3 padd ecx,dword ptr [ebp-4]! ~3 e) X# p& s6 g
mov dword ptr [ebp-8],ecx
1 J# J, C" X/ Q$ Y' t a=b-a;
) `: Z1 ^6 a3 \1 p# [8 w, wmov edx,dword ptr [ebp-8]" q' `( l' y6 R7 ^+ j/ A$ u
sub edx,dword ptr [ebp-4]
: i' b* W4 k9 c# r ?mov dword ptr [ebp-4],edx& K4 @& Z- b8 I, d* H) K- w# s
很明显正规方法只有8条Mov指令, 而你的方法有8条Mov指令和2条Sub指令和1条Add指令 要知道,和Mov指令比起来Sub指令,Add指令是很费时间的! |