Если 100010001000 - это строка, то это последовательность в Python.
Таким образом, вы можете использовать пакет itertools
, который содержит функцию cycle
.Эта функция может повторять вашу двоичную строку в цикле:
>>> 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 цифр.Просто рассчитайте маску <em>m со всеми цифрами, установленными на 1. И выполните вращение:
>>> 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'