异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果。
值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终结果。
特点:任何数和0异或都等于它本身;两个相同的数异或后的结果是0;
举例如下:
int a = 4 =100(二进制)
int b = 3 =011(二进制)
int c = a^b = 111 = 7;
下面就^常用应用做个介绍:
1. 在一排数中找到独一无二的一个数
本例启发来自于杭电oj 2095,在一排数字中,如果某一个数字的出现次数是奇数,则可以唯一判断出来。(代码为oj2095 题解)
#include<stdio.h>
int main()
{
int T;
while(scanf("%d",&T)!=EOF && T)
{
int a,result=;
while(T--)
{
scanf("%d",&a);
result = result^a;
}
printf("%d\n",result);
}
return ;
}
2.实现两个数的交换
a=a^b;
b=a^b;//b=a^b^b=a^0=a;
a=a^b;//a=a^a^b=0^b=b;
#include<stdio.h>
int main()
{
int a=;
int b=;
a=a^b;
b=a^b;
a=a^b;
printf("a:%d b:%d",a,b);
return ;
}
3.判断两个数是否相等
if(a^b==0)
printf("a=b");
else
printf("a!=b");