楼上的有个问题我很想不明白 为什么交换数字用 a-=b;b+=a;a=b-a; ? 无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思) 下面是int c=a;a=b;b=c;VC编译后的指令 int a=12,b=21;( Q* z: ?; I+ L0 S4 [1 Q3 s
mov dword ptr [ebp-4],0Ch
2 X. m4 R$ X- D1 A( m" jmov dword ptr [ebp-8],15h
! W" P* |0 x5 j) o$ T$ y! Z& t( K0 u: t+ n int c=a;. S) ]9 c( B, j) o! q
mov eax,dword ptr [ebp-4]$ I1 X) | v! [
mov dword ptr [ebp-0Ch],eax
, Z9 V9 J4 f; E! k. k a=b;
o1 e2 I6 ]9 j$ ^$ U) q% _ mov ecx,dword ptr [ebp-8]" p& p4 }1 _' R/ {, J- f
mov dword ptr [ebp-4],ecx
# L& z) d% E) f2 b; p b=c;' K9 E: ?% s! n, V, d
mov edx,dword ptr [ebp-0Ch]; K. s1 s9 s1 f! Y1 G/ e3 |
mov dword ptr [ebp-8],edx 下面是你的方法VC编译后的指令 a=12,b=21;, M) y) n( N( h- j
mov dword ptr [ebp-4],0Ch
X! J9 G+ a3 S( imov dword ptr [ebp-8],15h, R, x) U8 m" j7 U3 @8 m0 y
a-=b;; E( ]9 o# y' `' x4 ^# W
mov eax,dword ptr [ebp-4]
3 V7 B* ~- n/ m- t H; i* qsub eax,dword ptr [ebp-8]
- m0 ?/ Y7 N0 W R5 C/ ^, `8 Umov dword ptr [ebp-4],eax# j8 h/ ` q3 Z$ c- U# |2 N) X9 e
b+=a;
$ B6 v" t4 L0 H; @+ ~# u' c) zmov ecx,dword ptr [ebp-8]: ?7 ~7 s. {9 y) O+ U
add ecx,dword ptr [ebp-4] S( W, `% R& B4 H% y" M' b$ \
mov dword ptr [ebp-8],ecx3 w3 k2 `) p" z+ W2 [8 ^+ H
a=b-a;
% _2 R. H7 ^9 omov edx,dword ptr [ebp-8]
. u; r s% E. x. T* _sub edx,dword ptr [ebp-4]
' L0 K( |% f/ @7 m! |5 O/ g0 M0 Ymov dword ptr [ebp-4],edx9 a7 k ]5 J7 X+ a# V$ t+ m/ ]8 r) {
很明显正规方法只有8条Mov指令, 而你的方法有8条Mov指令和2条Sub指令和1条Add指令 要知道,和Mov指令比起来Sub指令,Add指令是很费时间的! |