楼上的有个问题我很想不明白 为什么交换数字用 a-=b;b+=a;a=b-a; ? 无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思) 下面是int c=a;a=b;b=c;VC编译后的指令 int a=12,b=21;( v' w/ c+ V# n
mov dword ptr [ebp-4],0Ch
8 S. f$ J) v! I) ^* cmov dword ptr [ebp-8],15h
% A; e; a; N \8 _ int c=a;
7 L* O/ d# i: h4 e* jmov eax,dword ptr [ebp-4]& W8 X6 l5 M$ b- f; m/ S) e" T
mov dword ptr [ebp-0Ch],eax
: L9 Y5 P/ N3 E0 N" f a=b;
+ U$ R0 ?! j- d+ c" G6 k mov ecx,dword ptr [ebp-8]
6 f4 s! U( L0 r; `1 i& k" p mov dword ptr [ebp-4],ecx( f2 [% H3 i9 \( s
b=c;
+ \4 ]. q6 T# ^6 H9 zmov edx,dword ptr [ebp-0Ch]( L5 Y$ Z4 C! }
mov dword ptr [ebp-8],edx 下面是你的方法VC编译后的指令 a=12,b=21;0 E2 M0 ^7 S( I
mov dword ptr [ebp-4],0Ch
2 u/ U% \/ h4 f( z7 V0 E% l% ?mov dword ptr [ebp-8],15h- v& J; I# l |7 S' e
a-=b;
& @$ \( a1 W/ p& s$ j1 nmov eax,dword ptr [ebp-4]9 C P' X/ ]8 ^# T
sub eax,dword ptr [ebp-8]
" J9 @, K3 g! Z- y8 K! r: x: H+ smov dword ptr [ebp-4],eax
9 p4 `9 E) K/ G. q' ] b+=a;8 ?$ t9 m1 |2 x$ ^* J
mov ecx,dword ptr [ebp-8]
( f! n( c* G0 h! Yadd ecx,dword ptr [ebp-4]0 i+ m$ l% \' e) @6 J% @0 t
mov dword ptr [ebp-8],ecx
* f( s. \7 @6 K# } a=b-a;% B% S- D% I s4 c: @
mov edx,dword ptr [ebp-8]
# s& K/ h U i7 H" Qsub edx,dword ptr [ebp-4]1 u# m* u L7 B2 ` E
mov dword ptr [ebp-4],edx, L4 t: o) A& q* X" ^
很明显正规方法只有8条Mov指令, 而你的方法有8条Mov指令和2条Sub指令和1条Add指令 要知道,和Mov指令比起来Sub指令,Add指令是很费时间的! |