如何在python中左移位数组

问题描述 投票:2回答:3

我有一个名为c0的位数组,包含28位

bitarray('1111011111111111111111110001')

如何将这个位数组左移多次,这意味着一个左移,两个左移等?左移目前是可以的!

注意:这与bitarray程序包有关。

python des
3个回答
4
投票

您可以使用切片:

def leftshift(ba, count):
    return ba[count:] + (bitarray('0') * count)

def rightshift(ba, count):
    return (bitarray('0') * count) + ba[:-count]

这些保持输入的位宽,在一端丢弃位,在另一端填充0

您可以创建自己的bitarray类型的子类:

class mybitarray(bitarray):
    def __lshift__(self, count):
        return self[count:] + type(self)('0') * count
    def __rshift__(self, count):
        return type(self)('0') * count + self[:-count]
    def __repr__(self):
        return "{}('{}')".format(type(self).__name__, self.to01())

演示:

>>> c0 = mybitarray(c0)
>>> c0
mybitarray('1111011111111111111111110001')
>>> c0 << 4
mybitarray('0111111111111111111100010000')
>>> c0 >> 4
mybitarray('0000111101111111111111111111')

您也可以将作者戳到support these operations natively


1
投票

[<<>>是移位运算符(位数组类应重写__ilshift____irshift__方法。


0
投票

@ MartijnPieters,我不确定您的代码是否正确,

>>> c0 = mybitarray(c0)
>>> c0
mybitarray('1111011111111111111111110001')
>>> c0 << 4
mybitarray('0111111111111111111100010000')
# this should be '11110111111111111111111100010000', you lost the first 4 bit
© www.soinside.com 2019 - 2024. All rights reserved.