Преобразование десятичного числа в двоичное и изменение одного индекса - PullRequest
0 голосов
/ 06 декабря 2018

Я ищу самое быстрое решение следующей проблемы: Моя функция принимает десятичное число dec, а затем преобразует его в двоичное число bin длины l.После этого я изменяю значение по i -ому индексу двоичного числа и преобразовываю результат обратно в десятичное число.В настоящее время я реализовал это следующим образом:

def new_dec_function(dec, i, l):
    bin = list(map(int, numpy.binary_repr(dec, width=l)))
    bin[i] = 1 - bin[i]
    new_dec = 0
    for bit in bin:
        new_dec = (new_dec << 1) | bit
    return new_dec

Знаете ли вы, можно ли это улучшить?

1 Ответ

0 голосов
/ 06 декабря 2018

Десятичное число, о котором вы говорите, уже сохранено в двоичном представлении на вашем компьютере, поэтому все, что вам нужно сделать, это перевернуть i-й бит числа.Это можно легко сделать с помощью бинарного оператора xor ^

def new_dec_function(dec, i):
    return dec ^ (1 << i)

>>> new_dec_function(5, 1)
7
>>> new_dec_function(5, 0)
4
...