作者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