Цикл двоичного числа в Python - PullRequest
0 голосов
/ 26 января 2019

Есть ли функция, которая циклически обрабатывает двоичное число? для примера:

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

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Если 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'
0 голосов
/ 26 января 2019

Я думал, что есть нативная функция, но не берите в голову, я сделал эту слабую дурацкую функцию, которая работает для меня

def cycle(n):
    return n[-1] + n[:-1]
0 голосов
/ 26 января 2019

Это очень хороший источник для ротационных битовых сдвигов в Python:

https://www.falatic.com/index.php/108/python-and-bitwise-rotation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...