如何在Python中操作位?

Ede*_*den 34 python

例如,CI可以将32位无符号值中的#10位置零,如下所示:

unsigned long value = 0xdeadbeef;
value &= ~(1<<10);
Run Code Online (Sandbox Code Playgroud)

我怎么用Python做到这一点?

Fre*_*son 49

Python的整数位运算的工作很像C中的&,|^在Python运营商合作,就像C中的~操作符作为一个在C符号整数; 也就是说,~x计算-x-1.

你必须要小心左移,因为Python整数不是固定宽度.使用位掩码来获得低位.例如,要做相当于32位整数的移位(x << 5) & 0xffffffff.


Gre*_*ill 11

value = 0xdeadbeef
value &= ~(1<<10)
Run Code Online (Sandbox Code Playgroud)


Mar*_*n W 5

Python 具有 C 风格的位操作运算符,因此您的示例在 Python 中实际上是相同的,只是没有类型关键字。

value = 0xdeadbeef
value &= ~(1 << 10)
Run Code Online (Sandbox Code Playgroud)


小智 5

您还应该查看BitArray,它是处理位序列的一个很好的接口。


Boe*_*ern 5

一些常见的位操作可以作为示例:

def get_bit(value, n):
    return ((value >> n & 1) != 0)

def set_bit(value, n):
    return value | (1 << n)

def clear_bit(value, n):
    return value & ~(1 << n)
Run Code Online (Sandbox Code Playgroud)

用法例如

>>> get_bit(5, 2)
True
>>> get_bit(5, 1)
False
>>> set_bit(5, 1)
7
>>> clear_bit(5, 2)
1 
>>> clear_bit(7, 2)
3
Run Code Online (Sandbox Code Playgroud)