关于位逻辑非运算符(^):是将数值转换成二进制,相同位相同的值为0,相同位不相同的值为1;如:
a=3二进制为011、
b=6二进制位110;
所以
c=a^b=3^6=5二进制为101;
a=b^c=6^5=3二进制为011;
b=a^c=3^5=6二进制为110;
举一个例子,把变量a的值与变量b的值互换;代码如下;
#include<stdio.h>
void ABB()
{
int a = 3;
int b = 6;
int c = a;
a = b;
b = c;
printf("a=%d\nb=%d\n", a, b);
}
int main()
{
ABB();
return 0;
}
得出的结果如下
而通过位逻辑非运算符,直接进行a与b的互换。
#include<stdio.h>
void ABB()
{
int a = 3;
int b = 6;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d\nb=%d\n", a, b);
}
int main()
{
ABB();
return 0;
}
结果如下:
这样做的好处是省去了中间变量。