清除python位索引到0

时间:2017-08-09 10:09:53

标签: java python bit-manipulation

我想知道如何将以下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:&amp;:'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 个答案:

答案 0 :(得分:2)

相同的代码适用于Python:

if constexpr(std::is_same<Method, UseCPU>()::value)