我有一个名为c0包含 28 位的位数组
bitarray('1111011111111111111111110001')
Run Code Online (Sandbox Code Playgroud)
我怎样才能左移这个位数组多次,意味着一个左移,两个左移等?现在左移一班没问题!
注意:这与bitarray包有关。
您可以使用切片:
def leftshift(ba, count):
return ba[count:] + (bitarray('0') * count)
def rightshift(ba, count):
return (bitarray('0') * count) + ba[:-count]
Run Code Online (Sandbox Code Playgroud)
这些保持输入的位宽,在一端丢弃位并在另一端填充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())
Run Code Online (Sandbox Code Playgroud)
演示:
>>> c0 = mybitarray(c0)
>>> c0
mybitarray('1111011111111111111111110001')
>>> c0 << 4
mybitarray('0111111111111111111100010000')
>>> c0 >> 4
mybitarray('0000111101111111111111111111')
Run Code Online (Sandbox Code Playgroud)
也可以戳作者原生支持这些操作。
| 归档时间: |
|
| 查看次数: |
2791 次 |
| 最近记录: |