【问题标题】:Clearing python bits index through 0通过0清除python位索引
【发布时间】: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,这是错误的答案。

我该怎么做?

【问题讨论】:

    标签: java python bit-manipulation


    【解决方案1】:

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

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

    【讨论】:

    • 自己试过了。我只是愚蠢地不去尝试。我没有尝试它,因为我认为因为 Python 中的 -1 不表示为 1111(它在 Java 中),所以这是行不通的。我应该删除这个问题吗,因为它似乎没有任何用途?
    • 展示高级 Python 也可以让你做低级的 bitstuff 是有价值的!
    猜你喜欢
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多