【笔记】关于位运算(2)
今天 Kersen 学姐给我们出题考试,考了一大堆位运算题,所以更新一下笔记(主要是更新一些 巧技小)~~
之前的笔记 -->【学习笔记】关于位运算
ps:因为改了改下面的表格的宽度(之前炸了),所以现在表格不炸了,但日历炸了……
位运算 巧技小 (二进制)
| 作用 | 方法 |
|---|---|
| 去掉最后一位 | \(x >> 1\) |
| 在最后加一个 0 | \(x << 1\) |
| 在最后加一个 1 | \(x << 1~~ \mid ~~ 1\) |
| 把最后一位变成 1 | \(x ~~\mid ~~1\) |
| 把最后一位变成 0 | \((x~~ \mid ~~1) ~~ \text{^} ~~1\) |
| 把最后一位取反 | \(x ~~\text{^}~~ 1\) |
| 把右数第 k 位变成 1 | \(x~~\mid~~(1 << (k - 1))\) |
| 把右数第 k 位变成 0 | \(x~~ \& \text{~}~~(1 << (k - 1))\) |
| 把右数第 k 位取反 | \(x~~\text{^}~~(1 << (k - 1))\) |
| 取末 k 位 | \(x~~\&~~(1 << k - 1)\) |
| 取右数第 k 位 | \(x >> (k - 1)~~\&~~ 1\) |
| 把末 k 位变成 1 | \(x ~~\mid~~ (1 << k - 1)\) |
| 把末 k 位取反 | \(x ~~\text{^}~~(1 << k - 1)\) |
| 把右数连续的 0 变成 1 | \(x~~\mid~~(x - 1)\) |
| 把右数连续的 1 变成 0 | \(x~~\&~~(x + 1)\) |
| 把右数第一个 0 变成 1 | \(x~~\mid~~(x + 1)\) |
| 把右数第一个 1 变成 0 | \(x~~\&~~(x - 1)\) |
| 取右边连续的 1 | \((x~~\text{^}~~(x + 1)) >> 1\) |
| 去掉右起第一个 1 的左边(lowbit) | \(x~~\&~~(x~~\text{^}~~(x - 1))\) \(\text{or}\) \(x~~\&~~(-x)\) |
| 判断奇偶 | \(x~~\&~~1\) |
位运算的优先级:
(\(~~\text{~}~~\)) > (\(<<,>>\)) > (\(\&\))> (\(\text{^}\))> ( | )

一些位运算的小技巧
浙公网安备 33010602011771号