C语言用异或的方法将两个数的值互换
a = a ^ b; // 以a为临时变量
b = a ^ b; // b=a^b => b=(a^b)^b => a^(b^b) => a
a = a ^ b; // a=a^b => a=a^(a^b) => (a^a)^b => b
一、简单介绍
这里介绍用异或的方法实现互换两个数的值,无需借助第3个临时变量。对于给定两个整数a,b,下面的异或运算可以实现a,b的交换:
a = a ^ b;
b = a ^ b;
a = a ^ b;
核心思想:
1.任意一个变量a与其自身进行异或运算,结果为0,即a^a=0
2.任意一个变量a与0进行异或运算,结果不变,即a^0=a
3.异或运算具有可结合性,即a^b^c=(a^b)^c=a^(b^c)
4.异或运算具有可交换性,即a^b=b^a
二、实例测试
#include <stdio.h>
#define swap(a,b) a^=b^=a^=b
int main(void)
{
int a=100,b=999;
int array[]={520,111};
printf("before swapping,a=%d,b=%d\n",a,b);
printf("before swapping,array[0]=%d,array[1]=%d\n",array[0],array[1]);
swap(a,b);
array[0]^=array[1];
array[1]^=array[0];
array[0]^=array[1];
printf("after swapping,a=%d,b=%d\n",a,b);
printf("after swapping,array[0]=%d,array[1]=%d\n",array[0],array[1]);
swap(array[0],array[1]);
printf("\narray[0]=%d,array[1]=%d\n",array[0],array[1]);
return 0;
}