如果我有一个11010011的位序,我想找一个序列中的位是1还是0(真或假),我怎样才能检查第4个位置是真还是假?
例:
10010101 (4th bit) -> False
10010101 (3rd bit) -> True
Run Code Online (Sandbox Code Playgroud)
按位左移和按位 AND 运算符是您的朋友。通常,您可以检查第 n 位是否已设置/未设置,如下所示:
if (x & (1<<n))
## n-th bit is set (1)
else
## n-th bit is not set (0)
Run Code Online (Sandbox Code Playgroud)
没有缓慢的字节移位:
if bits & 0b1000:
...
Run Code Online (Sandbox Code Playgroud)
编辑:实际上,(1 << 3)由编译器优化.
>>> dis.dis(lambda x: x & (1 << 3))
1 0 LOAD_FAST 0 (x)
3 LOAD_CONST 3 (8)
6 BINARY_AND
7 RETURN_VALUE
>>> dis.dis(lambda x: x & 0b1000)
1 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (8)
6 BINARY_AND
7 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
这两个解决方案是等效的,选择在您的上下文中看起来更可读的解决方案.
你可以使用位移
>>> 0b10010101 >> 4 & 1
1
>>> 0b10010101 >> 3 & 1
0
Run Code Online (Sandbox Code Playgroud)