语言的变量交换
不用第三个变量交换两个变量在面试题或者笔试题中无数次被提到,事实上,有些答案是理论性的,不是准确的。以整型为例,如下对比不同交换方式的差异。
不同的交换方式
- 利用中间变量
c = a;
00C02533 8B 45 F8 mov eax,dword ptr [a]
00C02536 89 45 E0 mov dword ptr [c],eax
a = b;
00C02539 8B 45 EC mov eax,dword ptr [b]
00C0253C 89 45 F8 mov dword ptr [a],eax
b = c;
00C0253F 8B 45 E0 mov eax,dword ptr [c]
00C02542 89 45 EC mov dword ptr [b],eax - xchg汇编
__asm xchg eax, a
__asm xchg eax, b
__asm xchg eax, a - 不用中间变量
a = a ^ b;
00AA10B0 mov edx,dword ptr [b]
00AA10B3 mov ecx,edx
00AA10B5 xor ecx,dword ptr [a]
b = a ^ b;
00AA10B8 xor edx,ecx
00AA10BA mov eax,edx
00AA10BC mov dword ptr [b],edx
00AA10BF xor eax,ecx
a = a ^ b;
不能仅仅通过指令个数确定三者的效率。
风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!