在一般情况下,我们交换两个变量的数据都需要第三个变量作为中间变量,如下
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int c;
printf("交换前a = %d,b = %d\n",a,b);
c = b;
b = a;
a = c;
printf("交换后a = %d,b = %d\n",a,b);
return 0;
}
那么怎样才能不使用第三个变量来实现两个变量数据的交换呢?
异或运算
在各种计算机语言中,如C、C++等,使用按位异或的思想执行的操作。异或逻辑的关系是:当AB不同时,输出P=1;当AB相同时,输出P=0。“⊕”是异或数学运算符号,异或逻辑也是与或非逻辑的组合,其逻辑表达式为:P=A⊕B。在计算机语言中,异或的符号为” ^ “。
一个数跟自己异或等于0,跟0异或等于本身,比如1010 ^ 1010 = 0000,1010 ^ 0000 = 1010
不使用中间变量实现两个变量的交换就是利用的异或运算来实现的
关键交换代码
a = a ^ b;
b = b ^ a;//b=b ^ a^b = 0^a = a
a = a ^ b;//a=a^b ^ b^a^b = 0^0^b = b
转换为二进制代码更加清楚
a = 1010 b = 0101
a = a^b = 1010^0101 = 1111
b = b^a = 0101^1111 = 1010
a = a^b = 1111^1010 = 0101
具体代码如下
#include <stdio.h>
int main()
{
int a = 100;
int b = 200;
printf("交换前a = %d,b = %d\n",a,b);
a = a ^ b;
b = b ^ a;
a = a ^ b;
printf("交换后a = %d,b = %d\n",a,b);
return 0;
}
这样就实现了不使用中间变量来交换两个变量的数据。