【C++】位运算
因为对位运算实在是太太太太太不熟悉了!所以每次遇到位运算相关的题都要卡好久才能把题目意思转化成容易理解的样子,今晚又被卡了所以一怒之下总结一篇等下次被卡就来翻翻qwq
与 &
翻译:同为1取1,只要有0就取0
- 可以用&来取每一位上的数,如果要判断n的第三位是否为1,就进行 $n$ & $2^{3-1}$ 运算,如果结果为 $2^{3-1}$ ,就说明当前判断的位数上是1,结果是0,就说明当前判断的位数上是0
- 判断奇偶
a & 1 == 1
a为奇数a & 1 == 0
a为偶数
或 | (OR)
翻译:有1取1,无1取0
- 一个数对另一个数进行 | 操作,当前位上是0将不产生任何影响,当前位上是1将会把对应位上变成1
- 把一个数变成最接近的偶数:
a = a | 1 - 1
异或 ^ (XOR)
翻译:相同为0,不同为1
- 一个数和本身进行异或运算得到结果为0
- 一个数和0进行异或运算得到结果为本身
- 上两条推出:奇数个相同的数异或运算得到结果为本身,偶数个相同的数异或运算得到结果为0
左移 <<
翻译:a << b = a x 2^b
右移 >>
翻译:a >> b = a / 2^b
优先级
按位反(~)> 位移运算(<<,>>)> 按位与(&)> 按位异或(^)> 按位或(|)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Texcavator 的秘密基地!
评论