将十进制数转换为二进制数并更改一个索引

时间:2018-12-06 16:34:31

标签: python numpy numba

我正在寻找以下问题的最快解决方案: 我的函数采用十进制数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 :(得分:3)

您所说的“十进制”数字已经以二进制表示形式存储在计算机中,因此您所要做的就是翻转数字的第i位。使用二进制异或运算符^

可以轻松完成此操作
def new_dec_function(dec, i):
    return dec ^ (1 << i)

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