按位与 &
x | y | ans |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
eg1. 计算3&5
00000011
& 00000101
-----------
00000001
∴ 3&5=1
用途
- 清零。
注: x & 0 = 0
。
2.取一个数的指定二进制位。
eg2. 求9的第三位为1还是0.
00001001
& 00000100
----------
00000000
如果ans
为1,则该位上为1。
否则,则该位上为0。
3.奇偶性
如果该数&1
的结果为1,则该数为奇数。
否则,则该数为偶数。
按位或 |
x | y | ans |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
eg3. 计算3|5
00000011
| 00000101
-----------
00000111
∴ 3&5=7
用途
将该数的某一位置1。
eg4. 求18的第三位置1.
00010010
| 00000100
----------
00010110
按位异或 ^
x | y | ans |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
eg5. 计算3^5
00000011
^ 00000101
-----------
00000110
∴ 3^5=6
用途
- 翻转二进制位
eg6. 反转23的所有二进制位.
00010111
^ 11111111
----------
11101000
-
任何数
^0
值不变 -
交换两个数
void Swap (int &a, int &b) {
a ^= b ^= a ^= b;
}
按位取反 ~
x | ans |
---|---|
0 | 1 |
1 | 0 |
eg7. 计算~3
00000011
~
-----------
11111100
用途
二进制最低位置0。
左移/右移
3 << 2
11 -> 1100, 即12
15 >> 2
11111 -> 111, 即3
复合运算符
运算符 | 复合运算符 |
---|---|
a = a & b; | a &= b; |
`a = a | b;` |
a = a ^ b; | a ^= b; |
a = a << b; | a <<= b; |
a = a >> b; | a >>= b; |
注意
- 负数在进行&和|运算时,按照补码的方式参与运算。
补码=反码+1
反码:二进制码除符号位外取反。
- 算术优先级
符号 | 解释 |
---|---|
/ | 除号 |
* | 乘号 |
% | (取余)模号 |
+ | 加号 |
- | 减号 |
<< | 按位左移 |
>> | 按位右移 |
> | 大于号 |
>= | 大于等于号 |
< | 小于号 |
<= | 小于等于号 |
== | 等于号 |
!= | 不等于号 |
& | 按位与 |
^ | 按位异或 |
` | ` |