作者eugenehsu (Rainy day)
看板C_and_CPP
標題Re: [問題] 新手發問:三個數字比大小的問題?
時間Thu Jun 29 11:42:45 2006
: //myoco315教的:不用tmp交換兩個變數的值
: nums[min]^=nums[j]^=nums[min]^=nums[j];
上面提供的這個方法真的很不錯, 給了敝人一個思考的空間
感謝原作者
不過敝人發現用一個tmp來交換兩個數值在速度上快了一點點(犧牲空間換取時間)
以下是反譯組的程式碼
int a = 1, b = 2, t=0;
004141CE mov dword ptr [a],1
004141D5 mov dword ptr [b],2
004141DC mov dword ptr [t],0
---------------------------------以下是用xor的方法----------
a ^= b ^= a ^= b;
004141E3 mov eax,dword ptr [a]
004141E6 xor eax,dword ptr [b]
004141E9 mov dword ptr [a],eax
004141EC mov ecx,dword ptr [b]
004141EF xor ecx,dword ptr [a]
004141F2 mov dword ptr [b],ecx
004141F5 mov edx,dword ptr [a]
004141F8 xor edx,dword ptr [b]
004141FB mov dword ptr [a],edx
--------------------------以下是用tmp----------
t=a;
00414213 mov eax,dword ptr [a]
00414216 mov dword ptr [t],eax
a=b;
00414219 mov eax,dword ptr [b]
0041421C mov dword ptr [a],eax
b=t;
0041421F mov eax,dword ptr [t]
00414222 mov dword ptr [b],eax
看來這世上真的沒有兩全其美的事情
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.158.129
1F:推 costbook:myoco315的方法是為了解題目:不使用條件判斷式交換兩數 06/29 12:04
2F:→ costbook:那個題目也是蠻好玩的 06/29 12:06
3F:推 drkkimo:這篇很有趣~:) 高階語言有時候看起來比較快的作法只是表面 06/29 12:13
4F:→ drkkimo:上的~~:) 06/29 12:13
5F:推 costbook:這系列...是有史以來最多正解的作業文了吧 06/29 12:19
6F:推 drkkimo:這篇要不要收… 我想一下 本來覺得可以給新手參考 06/29 12:44