我在需要做以下工作的地方遇到了麻烦:
给定一个数字X(比如10101010)和一个数字Y(比如1110)以及两个位置变量i,j(比如i=1,j=4),我需要做的是设置X中从i到j的所有位,以匹配Y中的位。
对于上面的例子,答案应该是101 1110 0。
我想到的解决办法是:
1. Right shift X >> i
3. Run loop from 0 to j-1
2. if(!(X (lsb) ^ Y(lsb)), then continue, else X(lsb) = ~X(lsb)
这里的问题是我不知道如何发挥个人的比特。
最佳答案
创建一个掩码,其中只有零位于位位置i
到j
,即~(2j+1-2i)
结果=(mask & X) | (Y << i)
python中的示例:
def replace_bits(X, Y, i, j):
mask = ~(2**(j+1) - 2**i)
return (mask & X) | (Y << i)
>>> replace_bits(int('10101010', 2), int('1110', 2), 1, 4)
188
>>> bin(replace_bits(int('10101010', 2), int('1110', 2), 1, 4))
'0b10111100'