Прямо сейчас, насколько мне известно, все средства преобразования из int в двоичную битовую строку предназначены для беззнаковых преобразований (bin
, format
, et c.). Есть ли способ быстро преобразовать заданное целое число в соответствующую ему двоичную строку дополнения (используя минимальные биты)?
Например, я бы хотел, чтобы эта функция f
выводила:
f(-4) = '100'
f(5) = '0101'
f(-13) = '10011'
Прямо сейчас моя реализация представляет собой следующий код:
def f(x):
"""Convert decimal to two's complement binary string"""
if x < 0:
bs = bin(x)[3:]
bs_pad = zero_pad(bs, roundup(tc_bits(x)))
return bin((int(invert(bs_pad),2) + 1))#negate and add 1
else: #Positive- sign bit 0.
bs = bin(x)[2:]
return "0b" + zero_pad(bs, roundup(tc_bits(x)))
, который в основном отслеживает каждый шаг процесса преобразования - заполнение нулями, отрицание, добавление 1, затем преобразование обратно в двоичный (на самом деле он также обеспечивает разрядность кратна четырем). Это было очень утомительно писать, и мне интересно, поддерживает ли Python более быстрый / сжатый код.