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)