Подтвердить что ты не робот

Как я могу сделать `bin (30)` return `00011110` вместо` 0b11110`?

Что означает "b" в выводе бункера (30): "0b11110"? Есть ли способ избавиться от этого "b"? Как я могу получить вывод bin(), чтобы всегда возвращать стандартный 8-разрядный вывод?

4b9b3361

Ответ 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' возвращаемого значения, и вы можете использовать выход в любом месте.