Y.异或运算
-
a^0=a; a^a=0; a^1=a'; a^a'=1;
-
满足交换律和结合律;
-
swap做法:
a=a^b;b=a^b;a=a^b;
-
快速比较两个值:
if(a^b==0)//成立则相等
-
翻转数位(例如:翻转
10100001
的第6位)int a, b, c = 1 << 6; a = 0xB1; // 10100001 b = a ^ c;//10100001 ^ 00100000 = 10000001
-
判断奇偶
异或和==0为偶;反之为奇;
-
互换二进值的奇偶位(00000110->00001001)
//假设 int 占两个字节,16位; #include<bits/stdc++.h> using namespace std; #define N(n) ((n<<1)&(0xAAAA))|((n>>1)&(0x5555)) int main(){ int n; cin>>n; int k = N(n); cout << k << endl; }
8.找出未出现两次的元素
A ^ B ^ C ^ B ^ C ^ D ^ A = A ^ A ^ B ^ B ^ C ^ C ^ D = 0 ^ 0 ^ 0 ^ D = 0 ^ D = D