Это может быть упрощено с format()функцией : format(6, '08b'); функция принимает значение (к {..}которому относится слот) и спецификацию форматирования (что бы вы не указали после :в строке форматирования).
Мартин Питерс
4
'{0:08b}'.format(-6)-> '-0000110'. Что делать, если вы не хотите знак? struct? -6%256?
n611x007
1
@ AK47 Да, начиная с Pythoon 2.6, вы можете писать int-константы в двоичной форме с префиксом 0b или 0B: 0b00000110
Обратите внимание, что это решение быстрее принятого . Какое решение является более ясным (или, смею сказать, Pythonic), вероятно, зависит от личного вкуса.
эфир
Я все еще изучаю суть питоничности, но это, очевидно, гораздо более универсально. Сначала я был рад увидеть принятое решение с его элегантным объяснением, но встревожен тем, что объект, вызываемый для выполнения методов, был записан в виде одной строки со всеми встроенными спецификациями, исключая участие переменных в таких вещах, как желаемая длина из цепочки битов. Это решает это полностью и настолько интуитивно понятно (по крайней мере, для Python 2), что нет необходимости объяснять каждый символ!
Post169
Не работает для отрицательного целого числа bin(-6)[2:].zfill(8)читается как'0000b110'
jlandercy
20
Немного сложный метод ...
>>> bin8 =lambda x :''.join(reversed([str((x >> i)&1)for i in range(8)]))>>> bin8(6)'00000110'>>> bin8(-3)'11111101'
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.
Nic3500
0
Предполагая, что вы хотите проанализировать количество цифр, используемых для представления, из переменной, которая не всегда постоянна, хорошим способом будет использование numpy.binary.
может быть полезно, когда вы применяете бинарный к силовым установкам
Ответы:
Просто, чтобы объяснить части строки форматирования:
{}
помещает переменную в строку0
принимает переменную в позиции аргумента 0:
добавляет параметры форматирования для этой переменной (иначе она будет представлять десятичную6
)08
форматирует число до восьми цифр с нулями слеваb
преобразует число в двоичное представлениеЕсли вы используете версию Python 3.6 или выше, вы также можете использовать f-строки:
источник
0
означает0th
аргументformat
. После форматирования двоеточия второе0
означает заполнение нулями до 8 пробелов, аb
для двоичногоformat()
функцией :format(6, '08b')
; функция принимает значение (к{..}
которому относится слот) и спецификацию форматирования (что бы вы не указали после:
в строке форматирования).'{0:08b}'.format(-6)
->'-0000110'
. Что делать, если вы не хотите знак?struct
?-6%256
?Просто еще одна идея:
Более короткий путь с помощью интерполяции строк ( Python 3.6+ ):
источник
bin(-6)[2:].zfill(8)
читается как'0000b110'
Немного сложный метод ...
источник
x
вправо и с помощью AND1
, эффективно выделяя один бит (0 или 1) за раз.Просто используйте функцию форматирования
Общая форма
источник
1000000 loops, best of 3: 556 ns per loop
Ответ eumiro лучше, но я просто публикую это для разнообразия:
источник
'%08x' % int(bin(6)[2:], 16)
.. или если вы не уверены, что это всегда должно быть 8 цифр, вы можете передать его в качестве параметра:
источник
numpy.binary_repr(num, width=None)
имеет аргумент волшебной шириныСоответствующие примеры из документации, указанной выше:
источник
Going Old School всегда работает
источник
number=number/2
дает поплавок, так чтоnumber=number//2
швы лучше, также я бы заменилnumber=number//2
наnumber//=2
иb=b+"0"
сb+="0"
или
источник
Предполагая, что вы хотите проанализировать количество цифр, используемых для представления, из переменной, которая не всегда постоянна, хорошим способом будет использование numpy.binary.
может быть полезно, когда вы применяете бинарный к силовым установкам
источник
Лучший способ - указать формат.
возвращает двоичное значение в формате строки.
Чтобы преобразовать двоичную строку обратно в целое число, используйте функцию int ().
возвращает целочисленное значение двоичной строки.
источник
источник