Source code for polymerist.genutils.bits

'''For bitwise operations and conversions to/from bitstrings'''

__author__ = 'Timotej Bernat'
__email__ = 'timotej.bernat@colorado.edu'

from typing import Union 


[docs] def int_to_bits(n : int, num_bits : int=8, clamp : bool=False, as_list : bool=False) -> Union[str, list[int]]: ''' Convert an integer into a string of its bits, padded out to <num_bits> bits If clamp=True and the binary representation of <n> has more than <num_bits> bits, then leading bits will be discarded If as_list=True, will return as list of 0/1 ints; otherwise, will return as string ''' bitstring = f'{n:0{num_bits}b}' # format into given number of bits with leading zeros - way easier than directly implementing bitshift-based operations if clamp: bitstring = bitstring[-num_bits:] if as_list: return [int(bit) for bit in bitstring] return bitstring