Что такое операторы >> и << в Python? - PullRequest
2 голосов
/ 24 ноября 2011

Для чего нужны >> и <<? 1003 *

Я прочитал это в коде:

https://github.com/mlaiosa/emlx2maildir/blob/master/emlx2maildir.py

FL_READ = (1<<0)
FL_DELETED = (1<<1)
FL_ANSWERED = (1<<2)
FL_ENCRYPTED = (1<<3)
FL_FLAGGED = (1<<4)
FL_RECENT = (1<<5)
FL_DRAFT = (1<<6)
FL_INITIAL = (1<<7)
FL_FORWARDED = (1<<8)
FL_REDIRECTED = (1<<9)
FL_SIGNED = (1<<23)
FL_IS_JUNK = (1<<24)
FL_IS_NOT_JUNK = (1<<25)
FL_JUNK_LEVEL_RECORDED = (1<<29)
FL_HIGHLIGHT_IN_TOC = (1<<30)

Я пока не могу найти документацию по нему.

Ответы [ 3 ]

4 голосов
/ 24 ноября 2011

Это оператор сдвига битов.Если у вас есть 1 (0b1), и вы сдвинете его влево на 4 бита (1 << 4), вы получите 0b10000, что означает 16.

А вот документация: http://docs.python.org/reference/expressions.html#shifting-operations

2 голосов
/ 24 ноября 2011

Операторы определены в разделе 5.7, «Операции сдвига» Справочника по языку Python :

Эти операторы принимают простые или длинные целые числа в качестве аргументов. Аргументы преобразуются в общий тип. Они сдвигают первый аргумент влево или вправо на количество битов, заданных вторым аргументом.

Сдвиг вправо на n битов определяется как деление на pow(2, n). Сдвиг влево на n битов определяется как умножение на pow(2, n). Счетчик отрицательных сдвигов вызывает исключение ValueError.

1 голос
/ 24 ноября 2011

В большинстве языков, включая Python, это операторы shift. Они работают с битами байта.

Например, 8 - это 0b00001000. 8 >> 1 означает сдвиг битов на 1 цифру вправо, добавление нуля слева (0b00000100 или 4). 8 >> 2 означает сдвиг вправо дважды. (0b00000010 или 2). << - это сдвиг влево, который работает противоположным образом. 8 << 1 выйдет на 0b00010000 или 16. 8 << 2 выйдет на 0b00100000 или 32.

Дополнительную информацию смотрите в документации по python.
Python 2.x: http://docs.python.org/reference/expressions.html#shifting-operations
Python 3.x: http://docs.python.org/py3k/reference/expressions.html#shifting-operations

...