先贴出代码,实现代码使用C#。语言无关性,道理都一样。
int a = 3, b = 4; //function 1 a = a + b; b = a - b; a = a - b; Console.WriteLine(a);//4 Console.WriteLine(b);//3 //function 2 a = a ^ b; b = b ^ a; a = a ^ b; Console.WriteLine(a);//3 Console.WriteLine(b);//4 //function 3 b = a + (a = b) * 0; Console.WriteLine(a);//4 Console.WriteLine(b);//3
第三种方法:
0000003a mov dword ptr [ebp-40h],14h 00000041 mov dword ptr [ebp-44h],0Ah low = high + (high = low) * 0的反汇编是这样的: 00000048 mov eax,dword ptr [ebp-40h] 0000004b mov dword ptr [ebp-48h],eax //这里是第三个变量地址 0000004e mov eax,dword ptr [ebp-44h] 00000051 mov dword ptr [ebp-40h],eax 00000054 mov eax,dword ptr [ebp-48h] 00000057 mov dword ptr [ebp-44h],eax