参考:位运算技巧
位运算的使用
1.and运算
and运算通常用于二进制取位操作,例如一个数and1的结果就是取二进制的最末位。
2.or运算
or运算通常用于二进制特定位上的无条件赋值,例如一个数or1的结果就是把二进制最末位强行变成1.如果需要把二进制最末位变成0,对这个数or1之后再减1就可以了,实际意义就是把这个数强行变成最接近的偶数。
3.xor运算
xor 的意思就是 "是不是不一样"。
这个算是我自己遇到比较多的一种位操作,Leetcode中遇到通过位操作取巧来解决的题目还是比较多的。xor运算通常对二进制的特定一位进行取反操作。
这里是今天学习到的:xor运算的逆运算是其本身,即(a xor b)xor b =a。xor可以用于简单的加密,告知对方一次加密的值,以及其中一个a(b),我们可以得到b(a)。
而且xor可以用于交换两个数的值。在python中:
a,b
(3, 5)
>>> a = a^b
>>> b = a^b
>>> a = a^b
>>> a,b
(5, 3)
4.not运算
not的定义为全部取反。
5.shl运算
a shl b表示a转为二进制后左移b位(在后面加上b个0)。实际上,左移b位其实就是相当于a×2^b。而在底层运算中,左移操作也比内置的运算速度要快的多。
>>> 4 << 2
16
>>> 2 <<2
8
6.shr运算
a shr b也就是将其转为二进制后右移b位,等于a/(2^b),