Reputation: 43
I need to convert the string "100" using bitwise without if after two adjacent digits The relation 100 is divided:
Accordingly, the condition is that instead of two digits, we must put 1 or 0 (opposite bit2). My python code does not work correctly when 00 is taken.
Maybe someone can advise how to fix it properly?
code
def _str_to_bytes(virkne) -> bytes:
bin_data = virkne.zfill((len(virkne) + 7) // 8 * 8)
data_in_bytes = int(bin_data, 2).to_bytes((len(bin_data) + 7) // 8, byteorder='big')
return data_in_bytes
virkne = "100"
garums = len(virkne)
byte = _str_to_bytes(virkne)
int_value = int.from_bytes(byte, byteorder='big')
print(f"virkne is: {int_value:02b}")
for i in range(garums - 1):
print('-'*30)
bit1 = (int_value >> (garums - 1 - i)) & 1
bit2 = (int_value >> (garums - 2 - i)) & 1
ad = (bit1 << 1) | bit2
print(f"{bit1}{bit2} -> 0b{ad:02b} = {ad}")
modified = (int_value & ~(0b10 << (garums - 2 - i))) | ((1 - bit2) << (garums - 2 - i))
print(f"Modified: {modified} ({modified:0{garums-1}b})")
output:
virkne is: 100
------------------------------
10 -> 0b10 = 2
Modified: 2 (10)
------------------------------
00 -> 0b00 = 0
Modified: 5 (101)
Upvotes: -5
Views: 25