Python 在整数中获取一组特定的二进制数?
如果我试图在一个特定的范围内得到一个特定的位范围(十进制),那么左移到结束索引,然后右移回到开始索引是最好的方法吗Python 在整数中获取一组特定的二进制数?,python,bit-shift,Python,Bit Shift,如果我试图在一个特定的范围内得到一个特定的位范围(十进制),那么左移到结束索引,然后右移回到开始索引是最好的方法吗 #pesudo-code: def group(aNumber,start, end): n = aNumber << 32 - n a = n >> end - start print(a) 比苏多代码: def组(数量、开始、结束): n=数量>结束-开始 印刷品(a) 在python中可以这样
#pesudo-code:
def group(aNumber,start, end):
n = aNumber << 32 - n
a = n >> end - start
print(a)
比苏多代码:
def组(数量、开始、结束):
n=数量>结束-开始
印刷品(a)
在python中可以这样做,只是没有使用正确的方法。当您想要检索数字的一部分时,您试图完成的操作称为掩蔽 您可以使用掩码来实现这一点:
number&0xF0
将检索位4到7(不移动它们)。
因此(number&0xF0)>>4
将检索位4到7,并将它们一直向右移位
至于掩码,
((1如果您想从位b0
获得总共bn
位:
def getbits(x, b0, bn):
return (x >> b0) & ((1 << bn) - 1)
def getbits(x,b0,bn):
返回(x>>b0)&((1“尝试在特定范围内获取特定范围的位(十进制)”-什么???很抱歉造成混淆。如果我有一个int,我想提取代表该int的某个索引的一组二进制数。例如5000,如果end=3,start=2,二进制数输出应该是50。例如0110 0010,这将不起作用。因为Python会自动将int转换为long(它的大小基本上是无限的,并且只受你的内存限制),所以你永远不能去掉左边的位。例如,5哦…我可以用C做一些类似的事情吗?如果可能的话?这能回答问题吗?我想OP想要一个掩码,但他们想要一个十进制的,而不是二进制的,就像你做的那样。例如group(5000,2,3)=50
,这不是您的代码所做的。
mask = ((1 << end) - 1)
result = (number & mask) >> start
def getbits(x, b0, bn):
return (x >> b0) & ((1 << bn) - 1)