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