我想获得一个位掩码以清除索引j与i之间的刺痛。
在Java中,我知道类似的东西
int allOnes = ~0;
int left = allOnes << (j + 1);
int right = ((i<<j) - 1);
int mask = left | right;
如何在Python中实现这些功能?
答案 0 :(得分:1)
与其简单地将两个的相关幂加在一起,不如不使用移位。假设您要让第8至第12位最低有效位。那你就可以
>>> i = 8
>>> j = 12
>>> mask = sum(2**x for x in range(i-1, j-1))
>>> bin(mask)
'0b11110000000'
然后您可以用它来掩盖实际数字:
>>> num = 0b110100111100001101100110101
^^^^
>>> bin(num & mask)
'0b1100000000'
^^^
当然省略了前导0
答案 1 :(得分:1)
相同的代码,只需删除int即可使用
allOnes = ~0;
left = allOnes << (j + 1);
right = ((i<<j) - 1);
mask = left | right;
答案 2 :(得分:1)
我建议转换为字符串并切片而不是屏蔽。...根据我的经验,它通常更快
x = 5233513423
print(int(bin(x)[2:][3:7],2))
尽管这只会给您您感兴趣的部分
(即,如果您实际上希望结果是0b11011000
(或其他)而不是0b11011
,则需要手动移位一些位)