在 Int 中获取一组特定的二进制数?

Getting a specific group of binary numbers in an Int?

如果我想在特定范围内获取特定范围的位(十进制),最好的方法是左移到结束索引,然后右移回起始索引吗?

#pesudo-code:
    def group(aNumber,start, end):
        n = aNumber << 32 - n
        a = n >> end - start
        print(a) 

您可以在 python 中做到这一点,只是您没有使用正确的方法。当您想要检索数字的一部分时,您尝试完成的操作称为屏蔽。

你用一个掩码来做:number & 0xF0 将检索位 4 到 7(不移动它们)。 所以 (number & 0xF0) >> 4 将检索位 4 到 7,并将它们一直向右移动。

至于面具,((1 << end) - 1) - ((1 << start) - 1)应该建立一个正确的面具。所以...

mask = ((1 << end) - 1) - ((1 << start) - 1)
result = (number & mask) >> start

实际上,由于您之后立即向右移动,您甚至不必屏蔽掉您想要的 下方 的位,因此这同样有效:

mask = ((1 << end) - 1)
result = (number & mask) >> start

如果你想从b0位得到总共bn位:

def getbits(x, b0, bn):
    return (x >> b0) & ((1 << bn) - 1)