python检查顺序中的位是true还是false

Han*_*ong 3 python bits

如果我有一个11010011的位序,我想找一个序列中的位是1还是0(真或假),我怎样才能检查第4个位置是真还是假?

例:

10010101 (4th bit) -> False
10010101 (3rd bit) -> True
Run Code Online (Sandbox Code Playgroud)

kjp*_*kjp 9

按位左移和按位 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)


And*_*ini 8

没有缓慢的字节移位:

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)

这两个解决方案是等效的,选择在您的上下文中看起来更可读的解决方案.


Joh*_*ica 5

bits = 0b11010011

if bits & (1 << 3):
    ...
Run Code Online (Sandbox Code Playgroud)


Cor*_*mer 5

你可以使用位移

>>> 0b10010101 >> 4 & 1
1
>>> 0b10010101 >> 3 & 1
0
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚起见,不要忘记那些括号。:) (2认同)