通过0清除python位索引

Posted

技术标签:

【中文标题】通过0清除python位索引【英文标题】:Clearing python bits index through 0 【发布时间】:2017-08-09 10:09:53 【问题描述】:

我想知道如何将以下 Java 代码实现到其 Python 等效项中。

在 Java 中,我使用一个数字并使用按位运算符清除从某个索引到第 0 个索引(包括)的位

int clearBitsIthrough0(int num, int i) 
    int mask = (-1 << (i + 1));
    return num & mask;

我对等效 python 代码的尝试如下

def clearBitsIThrough0(num, i):
    mask = format(0xf << 4, 'b')
    return num & mask

但是,我得到了一个

TypeError: &: 'int' 和 'str' 的操作数类型不受支持

我知道会发生这种情况,因为 mask 在这里是一个字符串,但是如果我将它转换为一个 int,我会丢失底层的整数值,我仍然会得到错误的结果。

我尝试了一种不同的方式来做以下

def clearBitsIThrough0(num, i):
    mask = int(format(0xf << 4, 'b'), 2)
    num = int(format(num, 'b'), 2)
    print(num, mask)
    return num & mask

但这会返回 0,这是错误的答案。

我该怎么做?

【问题讨论】:

【参考方案1】:

相同的代码在 Python 中也可以工作:

def clearBitsIThrough0(num, i):
    mask = (-1 << (i + 1))
    return num & mask

【讨论】:

自己试过了。我只是愚蠢地不去尝试。我没有尝试它,因为我认为因为 Python 中的 -1 不表示为 1111(它在 Java 中),所以这是行不通的。我应该删除这个问题吗,因为它似乎没有任何用途? 展示高级 Python 也可以让你做低级的 bitstuff 是有价值的!

以上是关于通过0清除python位索引的主要内容,如果未能解决你的问题,请参考以下文章

elk每日清除30天索引脚本

单片机怎么清中断标志位

STM32的滴答定时器的计数到0时标志位置1,需要软件清除标志位吗!,还是硬件自动清除

在 1 条 ARM 指令中清除高 16 位

清除位时,最大的一组不同字节值是唯一的

清除空格数组[重复]