异或运算 是 涉及到数据位运算时常见的处理方式。如何进行异或运算?在对应位上,相同为0,不同1,但其实两个数据异或运算就是进行无进位加法。
例如: int a = 7, b = 6, a ^b = ?
算法1: 相同为0,不同为1
a ^ b= : 0 0 0 1
算法2: 无进位相加
a ^ b= : 0 0 0 1
异或运算的性质
1)0^N == N
2) N^N == 0
3) 异或运算满足交换律和结合律
交换律: a^b = b^a
结合律:a^b^c = a^(b^c)
题目1:如何不用额外变量交换两个数?
//代码段1
#include <stdio.h>
void swap(int* a, int i, int j){
a[i] = a[i]^a[j];
a[j] = a[i]^a[j];
a[i] = a[i]^a[j];
}
int main(){
return 0;
}
代码解析:
为什么执行了 a = a^b; b = a^b; a= a^ b;