先来说一下异或^的原理:对应二进制位,相同为0,相异为1
比如a=3,b=5,对应二进制补码分别为011 101
a= 011
b= 101
a^b= 110
然后我们这里用异或的方法实现两数交换的原理就是
a^a=0,因为你两个数相同,对应位肯定全相同,相同为0嘛
0^b=b,举个例子:
c= 000
b= 101
c^b=101=b
那么通过a ^ a=0 ,0 ^ b=b
我们可以推出a ^ a ^ b=0 ^ b= b
而异或又是满足交换律的(同学们可自行验证)
也就是说a ^ a ^ b=a ^ (a ^ b)= b
b ^ (b ^ a)= a
#include<stdio.h>
//不创建临时变量实现两数交换
int main()
{
int a = 0;
int b = 0;
printf("请输入两个要交换的数:");
scanf("%d %d", &a, &b);
printf("交换前a=%d b=%d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换后a=%d b=%d\n", a, b);
//举个例子:a=3,b=5
//正数原反补码均相同
//a补:011
//b补:101
//a=a^b:110
//b=a^b:011
//a=a^b:101
//至此,完成ab两数交换
return 0;
}