Hans de Jong
Hans de Jong

Reputation: 2078

python check if bit in sequence is true or false

I want to find if a bit in a sequense is 1 or 0 (true or false) if i have some bitsequense of 11010011, how can i check if the 4th position is True or False?

example:

10010101 (4th bit) -> False
10010101 (3rd bit) -> True

Upvotes: 12

Views: 51350

Answers (6)

Andrea Corbellini
Andrea Corbellini

Reputation: 17751

Without the bit shifting:

if bits & 0b1000:
    ...

EDIT: Actually, (1 << 3) is optimized out by the compiler.

>>> 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    

The two solutions are equivalent, choose the one that looks more readable in your context.

Upvotes: 23

dawg
dawg

Reputation: 103824

Assuming integers, if you are counting Left Hand (LH), Most Significant Bit (MSB) to the Right Hand (RH) Lease Significant Bit (LSB):

def check_bitL2R(byte, bit):
    return bool(byte & (0b10000000>>bit))

Reverse if you want to count LSB towards the MSB:

def check_bitR2L(byte, bit):
    return bool(byte & (0b1<<bit))

Then check that:

fmt='{:^5} {:^5} {:^5}'
print fmt.format(*'bit  LSB  MSB'.split())
for bit in range(8):
    print fmt.format(bit, check_bitR2L(0b10010101, bit), check_bitL2R(0b10010101, bit)) 

Prints:

 bit   LSB   MSB 
  0     1     1  
  1     0     0  
  2     1     0  
  3     0     1  
  4     1     0  
  5     0     1  
  6     0     0  
  7     1     1  

Upvotes: 1

kjp
kjp

Reputation: 3116

Bitwise left-shifting and bitwise AND operator is your friend. In general you can check if the nth bit is set/unset as below:

if (x & (1<<n)) 
  ## n-th bit is set (1)

else 
  ## n-th bit is not set (0)

Upvotes: 14

jatinkumar patel
jatinkumar patel

Reputation: 2990

bits = '1110111'

if bits[-4] == '0':
    print "......false"
else:
    print  "....true"

Upvotes: 2

Cory Kramer
Cory Kramer

Reputation: 117866

You can use bit shifting

>>> 0b10010101 >> 4 & 1
1
>>> 0b10010101 >> 3 & 1
0

Upvotes: 5

John Kugelman
John Kugelman

Reputation: 361605

bits = 0b11010011

if bits & (1 << 3):
    ...

Upvotes: 4

Related Questions