位运算_233
位运算
位运算概述
-
计算机以二进制储备,只存在 \(1,0\) 两种状态
-
计算机对于二进制数据的运算叫位运算
按位于运算符(&)
- 两数同时为 \(1\),答案是 \(1\),否则结果是 \(0\)
用途
1.清零
一个数清零,就将其二进制数与 \(0\) 相与,结果为零
2.取一个数的指定位置
如果想取出某一数二进制下的后几位,则可以将其与 \(Y\) 相与,\(Y\) 的定义是要求的位数为 \(1\)
3.判断奇偶
最后一位是 \(1\) 为奇数,\(0\) 则为偶数。因此可以
if ( ( a & 1 == 0 ) )
或运算(|)
- 如果有 \(1\) 结果为 \(1\)
用途
更改位置为 \(1\)
将要求的位数改成1,就可以与一个要求位数为 \(1\) 数相或,即可完成更改
异或与算符(^)
-
两两相同为 \(0\),不同为 \(1\)
-
简单说就是不进数相加,不一样就为 \(1\)
性质
-
交换律
-
结合律 \((a\ xor\ b)xor\ c = a\ xor\ (b\ xor\ c)\)
-
对于任何数 x ,都有 \(a\ xor\ a = 0\ ,\ a \ xor\ 0 = a\)
-
自反性 \(a\ xor\ b\ xor\ b=a\ xor\ 0=a\)
用途
1.翻转指定位
与一个指定位数位 \(1\) 的数相异或,即可
2.与 \(0\) 异或值不变
同性质3
3.交换两个数
void Swap(int &a, int &b){
if (a != b){
a ^= b;
b ^= a;
a ^= b;
}
}
综合使用
\[a+b=((a\&b)<<1)+(a\ xor\ b)
\]