将十进制数转换为二进制数并更改一个索引
Convert decimal number to binary number and change one index
我正在寻找以下问题的最快解决方案:
我的函数采用十进制数 dec
,然后将其转换为长度为 l
的二进制数 bin
。之后,我更改二进制数第 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
您知道这是否可以改进吗?
您所说的 'decimal' 数字已经以二进制表示形式存储在您的计算机中,因此您只需翻转数字的第 i 位即可。这可以使用二元异或运算符 ^
轻松完成
def new_dec_function(dec, i):
return dec ^ (1 << i)
>>> new_dec_function(5, 1)
7
>>> new_dec_function(5, 0)
4
我正在寻找以下问题的最快解决方案:
我的函数采用十进制数 dec
,然后将其转换为长度为 l
的二进制数 bin
。之后,我更改二进制数第 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
您知道这是否可以改进吗?
您所说的 'decimal' 数字已经以二进制表示形式存储在您的计算机中,因此您只需翻转数字的第 i 位即可。这可以使用二元异或运算符 ^
def new_dec_function(dec, i):
return dec ^ (1 << i)
>>> new_dec_function(5, 1)
7
>>> new_dec_function(5, 0)
4