是否存在循环二进制数的函数?例如:
100010001000 turns 010001000100
and it turns 001000100010 then 000100010001 and then 100010001000 so on so forth
答案 0 :(得分:1)
这是Python中旋转位移位的很好的来源:
https://www.falatic.com/index.php/108/python-and-bitwise-rotation
答案 1 :(得分:1)
如果100010001000是字符串,那么它是Python中的序列。
因此,您可以使用包含cycle
函数的itertools
软件包。
此函数可以循环访问二进制字符串:
>>> 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'
答案 2 :(得分:0)
我以为有一个本机函数,但是没关系,我做了一个适合我的松散鹅毛函数
def cycle(n):
return n[-1] + n[:-1]