python中的位运算
经常有一些题目的模拟题会结合位运算考察模拟能力,如果位运算能力不过关往往会被位运算本身所缠住。这在python这种语言使用者上应该问题更大,因为有强大的类库解决各类计算问题,实际很少用到低层的位运算,甚至对整数的二进制api一无所知导致连两数异或这样的操作也得自己写,不仅性能可能有问题,而且非常浪费时间。因此在这里补强一下位运算。
整数在计算机中是以二进制的形式表示的,二进制的每位数字都是0或1。位运算是把数字用二进制表示后,对每位上0或1的运算。位运算只有6种:非、与、或、异或、左移和右移,在python中几乎都有现成的简明实现。
位运算名称 | 作用 | Python用法 | 示例 |
---|---|---|---|
非 (NOT) | 按位取反,将0变1,1变0 | ~ |
~5 结果为 -6 |
与 (AND) | 按位与操作,两位都为1时为1 | & |
5 & 3 结果为 1 |
或 (OR) | 按位或操作,只要有一位为1即为1 | | |
5 | 3 结果为 7 |
异或 (XOR) | 按位异或,相同为0不同为1 | ^ |
5 ^ 3 结果为 6 |
左移 (<<) | 将位向左移,低位补0 | << |
5<<1 结果为 10 |
右移 (>>) | 将位向右移,高位补符号位 | >> |
5>>1=2 结果为 2 |
PS:左移低位补0,右移高位是补符号位!
在计算机中,二进制数通过符号位来区分正数和负数。常用的表示方法是补码。规则如下:
- 正数:最高位为0。例如,二进制的
00000101
表示十进制的5
。 - 负数:最高位为1。负数使用补码表示,负数的补码通过将数值的二进制取反再加1得到。例如,十进制
-5
的补码为11111011
。
这样可以方便地进行加减运算,并且确保计算结果的符号正确。
注意,负数运算是补码进行位运算,补码是在反码的基础上+1,转换回去也是类似的。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 一世逍遥的博客!
评论