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