如何在python中为索引j和i之间的干净位写位掩码?

时间:2019-02-15 04:13:38

标签: python python-3.x binary bit

我想获得一个位掩码以清除索引j与i之间的刺痛。

在Java中,我知道类似的东西

int allOnes = ~0;
int left = allOnes << (j + 1);
int right = ((i<<j) - 1);
int mask = left | right;

如何在Python中实现这些功能?

3 个答案:

答案 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,则需要手动移位一些位)