Реализовать функцию для транскодирования данных, содержащих битовые поля. В решении необходимо использовать побитовые операции

Реализовать функцию для транскодирования данных, содержащих битовые поля. В решении необходимо использовать побитовые операции. Неиспользуемые поля результата должны содержать нулевые биты.

введите сюда описание изображения

Тесты:

>>> main('837820')
'180326'

>>> main('555892')
'901156'

>>> main('701213')
'802925'

>>> main('864135')
'917566'

Пытался решить так, но что-то не выходит...

def main(input_decimal):

input_decimal = int(input_decimal)

T1 = (input_decimal >> 0) & 0b1111
T2 = (input_decimal >> 9) & 0b11
T4 = (input_decimal >> 16) & 0b1111

new_T1 = T1 << 6
new_T2 = T2 << 13
new_T4 = T4 << 2

result = new_T1 | new_T2 | new_T4
return str(result)

Ответы (1 шт):

Автор решения: Алексей Р

Нужно было немного подправить смещения и маски, а так подход корректный

def main(input_decimal):
    input_decimal = int(input_decimal)

    T1 = input_decimal & 0b1111
    T2 = (input_decimal >> 4) & 0b111111
    T4 = (input_decimal >> 17) & 0b111

    new_T1 = T1 << 3
    new_T2 = T2 << 14
    new_T4 = T4

    result = new_T1 | new_T2 | new_T4
    return str(result)


for inp in '837820', '555892', '701213', '864135':
    print(f'{inp} -> {main(inp)}')
837820 -> 180326
555892 -> 901156
701213 -> 802925
864135 -> 917566
→ Ссылка