bit manipulation – Bit masking in Python

bit manipulation – Bit masking in Python

Most of your value* constants arent actually bit masks, only value7 and value8 are. Id define another bit mask to extract the lower bits, so I would have three bit masks in total:

mask0 = 0x07
mask1 = 0x40
mask2 = 0x80

Now your function becomes

def parse_byte(byte):
    return byte & mask2, byte & mask1, byte & mask0

I did not convert the results to bool — I dont see why this should be necessary. When checking the returned value with if, it will be implicitly converted to bool anyway.

Also note that

format(value,b).zfill(8)

can be simplified to

format(value,08b)

Given a value such as:

>>> x = 0b10001000

You can find out whether the top bits are set with:

>>> bit8 = bool(x & 0b10000000)
>>> bit7 = bool(x & 0b01000000)

To find which lower bit is set, use a dictionary:

>>> bdict = dict((1<<i, i+1) for i in range(6))
>>> bdict[x & 0b00111111]
4

bit manipulation – Bit masking in Python

You dont need the other two functions:

def parse_byte(byte):
    value7_set = byte & value7 == value7
    value8_set = byte & value8 == value8
    base_value =  byte & 7
    return value7_set,value8_set,base_value

Leave a Reply

Your email address will not be published. Required fields are marked *