在python中循环一个二进制数

时间:2019-01-25 22:38:12

标签: python binary

是否存在循环二进制数的函数?例如:

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

3 个答案:

答案 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]