Re: [問題] 新手發問:三個數字比大小的問題?

看板C_and_CPP (C/C++)作者 (Rainy day)時間18年前 (2006/06/29 11:32), 編輯推噓4(402)
留言6則, 2人參與, 最新討論串1/1
: //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

06/29 12:04, , 1F
myoco315的方法是為了解題目:不使用條件判斷式交換兩數
06/29 12:04, 1F

06/29 12:06, , 2F
那個題目也是蠻好玩的
06/29 12:06, 2F

06/29 12:13, , 3F
這篇很有趣~:) 高階語言有時候看起來比較快的作法只是表面
06/29 12:13, 3F

06/29 12:13, , 4F
上的~~:)
06/29 12:13, 4F

06/29 12:19, , 5F
這系列...是有史以來最多正解的作業文了吧
06/29 12:19, 5F

06/29 12:44, , 6F
這篇要不要收… 我想一下 本來覺得可以給新手參考
06/29 12:44, 6F
文章代碼(AID): #14eqdFHt (C_and_CPP)
文章代碼(AID): #14eqdFHt (C_and_CPP)