楼上的有个问题我很想不明白 为什么交换数字用 a-=b;b+=a;a=b-a; ? 无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思) 下面是int c=a;a=b;b=c;VC编译后的指令 int a=12,b=21;
6 \; v3 n5 q% N( ?mov dword ptr [ebp-4],0Ch" B" {0 F' o" ?3 B# d7 |
mov dword ptr [ebp-8],15h
6 ?( D8 |) Y% U2 c; @" b int c=a;
6 c/ ?- n( r$ a4 p# Z3 c$ j3 V3 ~mov eax,dword ptr [ebp-4]/ a- ~3 [) M$ y, V
mov dword ptr [ebp-0Ch],eax; ]) O0 k+ Q1 ^: K7 l4 u- v) b+ U
a=b;
/ H2 D1 { C! g/ y7 w& i( P mov ecx,dword ptr [ebp-8]
; f4 k+ ~1 g3 H, c! _' y1 A mov dword ptr [ebp-4],ecx9 {* v( e; p) x" j( m: r+ J
b=c;
! S: f6 y! G' i% Rmov edx,dword ptr [ebp-0Ch]* f* d2 T6 k# f7 o7 c
mov dword ptr [ebp-8],edx 下面是你的方法VC编译后的指令 a=12,b=21;/ s, G: ^$ ~4 ]& x" Q* S
mov dword ptr [ebp-4],0Ch
! V& F, Y3 E: Z8 a; M# }; Kmov dword ptr [ebp-8],15h
7 c8 e5 t B5 |% E a-=b;
/ `/ M. r$ l- K3 }% L. Gmov eax,dword ptr [ebp-4]
/ U b# K% ?! c: k" tsub eax,dword ptr [ebp-8]) h% y1 l/ j0 u" z( \% P! H
mov dword ptr [ebp-4],eax
; i+ f# j6 V* }$ n' i b+=a;2 T" k; E; ^: I" i+ t8 m$ d u
mov ecx,dword ptr [ebp-8]
* \# H4 I' T0 w" nadd ecx,dword ptr [ebp-4]
8 t4 Y. O7 H9 h# t( t4 |mov dword ptr [ebp-8],ecx
( S) ?) c- t$ \3 k a=b-a;
& I% ?, D/ J9 B9 Lmov edx,dword ptr [ebp-8]
) N+ g9 B1 T4 K4 {& E, U3 Asub edx,dword ptr [ebp-4]. T4 c3 l2 [/ Q8 A0 g, A
mov dword ptr [ebp-4],edx
& g! x; ~/ H+ m# [ 很明显正规方法只有8条Mov指令, 而你的方法有8条Mov指令和2条Sub指令和1条Add指令 要知道,和Mov指令比起来Sub指令,Add指令是很费时间的! |