python - 在python中循环一个二进制数

标签 python binary

有没有循环二进制数的函数?例如:

100010001000 turns 010001000100
and it turns 001000100010 then 000100010001 and then 100010001000 so on so forth 

最佳答案

如果 100010001000 是一个字符串,那么它是 Python 中的一个序列。

因此,您可以使用包含 cycleitertools 包。功能。 这个函数可以循环迭代你的二进制字符串:

>>> n = "100010001000"
>>> c = itertools.cycle(n)
>>> next(c)
'1'
>>> next(c)
'0'
>>> next(c)
'0'
>>> next(c)
'0'
>>> next(c)
'1'
...

您可以使用此函数来移动数字:

>>> c = itertools.cycle(n)
>>> next(c)
'1'
>>> "".join(next(c) for _ in range(len(n)))
'000100010001'

如果重复最后两个操作,就会得到循环(但以另一种方式)。

您还可以使用切片串联,例如:

>>> n = "100010001000"
>>> n = n[-1:] + n[0:-1]
>>> n
'010001000100'
>>> n = n[-1:] + n[0:-1]
>>> n
'001000100010'
>>> n = n[-1:] + n[0:-1]
>>> n
'000100010001'

如果您的数字是整数,则可以使用二元运算符,例如 >>、<<、& 和 |。 为此,您需要知道二进制整数的长度,这里有 12 位数字。 只需计算所有数字设置为 1 的掩码 m 即可。然后进行旋转:

>>> m = int("111111111111", 2)
>>> n = int("100010001000", 2)
>>> bin(n)
'0b100010001000'
>>> n = (n >> 1) | (n << 11) & m
>>> bin(n)
'0b10001000100'
>>> n = (n >> 1) | (n << 11) & m
>>> bin(n)
'0b1000100010'
>>> n = (n >> 1) | (n << 11) & m
>>> bin(n)
'0b100010001'
>>> n = (n >> 1) | (n << 11) & m
>>> bin(n)
'0b100010001000'

关于python - 在python中循环一个二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54373726/

相关文章:

只有特定参数的 Python 模拟函数

c - 使用十六进制编辑器修改库中的 env 变量名称?

python 将读取文件中的字符串方法替换为二进制

python - 网络抓取Python不获取结果

python - 这两个实现有什么区别?

python - 我需要创建一个函数,将整数转换为二进制,并在 python 中使用一组位数

python - 在 Python 中从 CSV 文件中读取行

Javascript 十进制转二进制 - 64 位

python - 断言一个数字是二进制的

python - 对有限集中的符号列表进行编码的最紧凑方法是什么?