运算定义
P | Q |
---|---|
1 | 0 |
0 | 1 |
0 | 0 |
1 | 1 |
P^Q |
---|
1 |
1 |
0 |
0 |
在二进制下,参与异或运算的值相同则为0,不同则为一,其实本文所有内容十进制、8进制、16进制等整数进制都适用
实践运用
交换
不需要借助新增变量,原地实现交换两个变量的值,仅限于变量是整数的情况下
void swap(int &a,int &b){
a=a^b;
b=b^a;
a=a^b;
}
清零
可以实现将a置为0
int a =10;
a=a^a;
反转
当需要进行位操作时,异或操作可以将二进制数指定位置上的值进行反转
将10100001的第2位和第3位翻转,则与00000110进行按位异或运算。 10100001^00000110 = 10100111
相等
判断两个变量的值是否相等,对他们进行异或运算如果为0,那就是相等,比如判断两个ip地址是否相等,IP地址在Http报文里都是大段大段的二进制,转成十进制判断很罗嗦,直接来个异或,直接出结果
结尾
举一反三,大家反思一下,自己的实际工作中,是否可以运用一下异或操作,优化简化自己的代码逻辑