Преобразовать целое число в двоичное, а затем сделать сдвиг влево на Python - PullRequest
0 голосов
/ 02 октября 2018

У меня есть целочисленный ввод из текстового файла, который мне нужно преобразовать в двоичный файл и сделать сдвиг влево на 12 позиций.

Итак, если мое число равно 6. Это двоичное число 110.Мой окончательный вывод должен быть 110000000000000, бит сдвинут на 12 мест.

Я пытался:

i = 6
h = int(bin(i)[2:])<<12

Но это дает неправильный вывод.Проблема в том, что bin(i) возвращает строку, поэтому мне пришлось преобразовать ее в int, но затем с помощью оператора shift сдвигает целое число, а не двоичное число.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вы можете выполнить сдвиг битов перед преобразованием в двоичную, поскольку сдвиг битов не имеет значения для основы вашего целого числа (сдвиг битов по определению выполняется в основании 2).

i = 6 << 12
answer = bin(i)[2:]

Редактировать : Альтернативное двоичное преобразование из @ guidot

i = 6 << 12
answer = "{:b}".format(i)

Дополнительные преобразования

Просто для удовольствия, вот некоторые другие способыбитовое смещение числа:

i = 6 * (2**12) # This will convert into 6 * 2^12
answer = "{:b}".format(i)

битовое смещение удвоит числовое значение, поэтому, умножив битовое смещение на две степени, мы получим одно и то же:

> print(6 << 12)
24576
> print(6 * 2**12)
24576

Как правило, лучшеиспользовать битовое смещение, если вы знаете, что хотите удвоить значение.

Вы также можете преобразовать его в двоичное, а затем добавить 13 конечных нулей, что является простым способом достижения той же функциональности:

i = 6 # Notice: No operation here this time
answer = "{:b}".format(i) + ('0' * 12)

Возможно, не рекомендуется использовать последний метод, но он иллюстрирует, как работает сдвиг битов влево.

0 голосов
/ 02 октября 2018

Я нашел способ сделать это.

h = int ((bin (i << 12) [2:]), 2) </p>

...