Re: [問題] 新手發問:三個數字比大小的問題?
: //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
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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章