异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a.
利用异或进行两个值的交换
异或有两个很重要的性质:
1、 A^A = 0;
2、A^0 = A;
利用这两个性质,我们就能够利用异或进行两个值的交换。
代码如下:
#include int main()
{
int a = -11;
int b = -1;
a = a^b;
b = a^b;
a = a^b;
/*或者简写为
a ^= b;
b ^= a;
a ^= b
printf("交换后a = %d,b = %d\n",a,b);
return 0;
}
上述是C语言中如何用异或交换两个值,大家了解的如何?别着急,更多是专业知识爱站技术频道小编带你细细了解,希望能为你学习带来帮助。
异或运算可以达到交换两数的目的,代码如下:void swap(int &a, int &b){a = a^b;b = a^b;a = a^b;}但不推荐使用这种方式,附上常用的临时变量方法对比说明。临时变量方法:void swap(int &a, int &b)...
异或运算可以达到交换两数的目的,代码如下:
void swap(int &a, int &b)
{
a = a^b;
b = a^b;
a = a^b;
}
但不推荐使用这种方式,附上常用的临时变量方法对比说明。
临时变量方法:
void swap(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
对于临时变量法,每次赋值只要读取一个变量的值到寄存器,然后再从寄存器写回到另一个变量中即可,前后涉及两次内存写入操作;但是对于异或运算操作,每次都需要读取两个数据到寄存器中,再进行运算操作,之后把结果写回到变量中,前后共需要三次内存写入操作。另外一点,异或操作的代码可读性差。
如果使用C语言实现上述两种方法,并用gcc编译器编译,可以使用命令gcc -S swap.c 查看相应的汇编代码,临时变量法代码行数更少,另外使用 gcc 编译器时,用异或运算交换数组会出错,参见链