Зацикливается код на выполнение алгоритма

Рейтинг: 2Ответов: 2Опубликовано: 10.01.2023

Зацикливаться мой код, который переводит число из десятичной системы счисления в двоичную

   def decimal_binary(n: int, *, precision: int = 32) - list[int]:
    arr = [0] *  precision
    i = 0
    while n:
        arr[i] = n % 2
        n //= 2
        i += 1
    return arr[i - 1 :: -1]


decimal_binary(-256)

Ответы

▲ 0Принят

Ваш код действительно зацикливаться на отрицательных числах, т. к. в цикле while n число n не будет равно 0.

a = -1 // 2
print(a)

Оператор // -> math.floor(a / b)

▲ 3

Для отрицательных чисел нужно писать свою обработку, потому как

-1//2 == -1

Но вопрос, что вы хотите получить? Какое представление для, скажем, -5? Если что-то типа -101, то проще всего запомнить знак, получить значение по модулю, его бинарное представление и вернуть знак на место. Если же что-то типа 11111111111111111111111111111011 — то это уже совсем другой вопрос...