Что означает "b" в выводе бункера (30): "0b11110"? Есть ли способ избавиться от этого "b"? Как я могу получить вывод bin(), чтобы всегда возвращать стандартный 8-разрядный вывод?
Как я могу сделать `bin (30)` return `00011110` вместо` 0b11110`?
Ответ 1
Использование zfill():
Верните числовую строку, заполненную нулями в строке ширины длины. Префикс знака обрабатывается правильно. Исходная строка возвращается, если ширина меньше len (s).
>>> bin(30)[2:].zfill(8)
'00011110'
>>>
Ответ 2
0b как 0x - указывает, что число отформатировано в двоичном формате (0x указывает, что число в шестнадцатеричном виде).
См. Как вы выражаете бинарные литералы в python?
См. Http://docs.python.org/dev/whatsnew/2.6.html#pep-3127-integer-literal-support-and-syntax
Чтобы отключить 0b, проще всего использовать нарезку строк: bin(30)[2:]
И аналогично для формата до 8 символов:
('00000000'+bin(30)[2:])[-8:]
В качестве альтернативы вы можете использовать форматирование строк (в 2. 6+), чтобы сделать все это за один шаг:
"{0:08b}".format(30)
Ответ 3
Воспользуйтесь известной функцией format()
с менее известным вторым аргументом и соедините ее с zfill()
'b'
- двоичный
'x'
- Hex
'o'
- Octal
'd'
- Десятичный
>>> print format(30, 'b')
11110
>>> print format(30, 'b').zfill(8)
00011110
Должен сделать. Здесь 'b'
обозначает двоичный код, аналогичный 'x'
, 'o'
и 'd'
для шестнадцатеричных, восьмеричных и десятичных знаков соответственно.
Ответ 4
Текущие ответы не учитывают отрицательные значения (спасибо @Gui13 за комментарий!), и в этом случае вы получите -0b...
вместо просто 0b...
. Вы можете обрабатывать оба с помощью простого if-else
, где значение проверяется, меньше ли оно нуля или нет
>>> def printBit(x):
if x < 0:
return '-' + bin(x)[3:].zfill(8) # replace
else:
return bin(x)[2:].zfill(8)
>>> print(printBit(30))
'00011110'
>>> print(printBit(-30))
'-00011110'
или используя replace()
>>> print(bin(30)).replace('0b', '').zfill(8)
Проблема с вышеперечисленным вызовом заключается в том, что один из битов получает "потерянный" знак -
из-за того же значения, которое используется для zfill()
. Вы можете справиться с этим также с простой тройной проверкой:
>>> x = 30
>>> print(bin(x)).replace('0b', '').zfill(9 if x < 0 else 8)
'00011110'
>>> x = -30
>>> print(bin(x)).replace('0b', '').zfill(9 if x < 0 else 8)
'-00011110'
Наконец, вы также можете сделать zfill()
для автоматической адаптации числа 0
для соответствия байтов (8 бит) или числа n
битовых квадруплетов (4 бит):
>>> def pb(x):
bres = bin(x).replace('0b', '').replace('-', '') # If no minus, second replace doesn't do anything
lres = len(bres) # We need the length to see how many 0s we need to add to get a quadruplets
# We adapt the number of added 0s to get full bit quadruplets.
# The '-' doesn't count since we want to handle it separately from the bit string
bres = bres = ('-' if x < 0 else '') + bres.zfill(lres + (4-lres%4))
return bres
>>> print(pb(7))
'0111'
>>> print(pb(-7))
'-0111'
>>> print(pb(30))
'00011110'
>>> print(pb(-30))
'-00011110'
Вот финальная версия с адаптируемым заполнением 0
и дополнительным разделом с пробелом каждые n
символы (где n
определяется коэффициентом заполнения):
>>> def pb(x, fillingBits=4, splitWithSpace=True):
# If no minus, second replace doesn't do anything
bres = bin(x).replace('0b', '').replace('-', '')
lres = len(bres)
bres = bres.zfill(lres + (fillingBits - (lres % fillingBits)))
lres = len(bres)
# We can also add a blank after every fillingBits character
if splitWithSpace:
bres = ' '.join([bres[i:(i + fillingBits)] for i in range(0, lres, fillingBits)])
bres = ('-' if x < 0 else '') + bres
# We remove any trailing/leading blanks (occurring whenever splitWithSpace enabled)
return bres.strip()
>>> print(pb(7))
'0111'
>>> print(pb(-7))
'-0111'
>>> print(pb(30))
'0001 1110'
>>> print(pb(-30))
'-0001 1110'
Ответ 5
python 2.7
print "{0: b}". format (30)
python 3.x
print ('{0: b}'. format (30))
Ответ 6
Вы можете использовать формат в Python 2 или Python 3:
>> print( format(15, '08b') )
00001111
[] 's
Ответ 7
Вы также можете использовать это:
bi=bin(n)[2:]
Это приведет к удалению части '0b'
возвращаемого значения, и вы можете использовать выход в любом месте.