Что делать >> и << означает в Python?

Я замечаю, что могу сделать что-то вроде 2 << 5 чтобы получить 64 и 1000 >> 2 чтобы получить 250.

Также я могу использовать >> в print:

print >>obj, "Hello world"

Что здесь происходит?

+49
источник поделиться
7 ответов

Это операторы побитового сдвига.

Цитата из docs:

x << y

Возвращает x с битами, сдвинутыми влево на y местами (а новые биты в правой части - это нули). Это то же самое, что умножение x на 2**y.

x >> y

Возвращает x с битами, сдвинутыми вправо на y местами. Это то же самое, что разделение x на 2**y.

+37
источник

Я думаю, что это важный вопрос, и на него еще нет ответа (ОП, кажется, уже знает об операторах сдвига). Позвольте мне попытаться ответить, оператор >> в вашем примере используется для двух разных целей. В терминах c++ этот оператор перегружен. В первом примере он используется как побитовый оператор (сдвиг влево), а во втором сценарии он просто используется как перенаправление вывода. т.е.

2 << 5 # shift to left by 5 bits
2 >> 5 # shift to right by 5 bits
print >> obj, "Hello world" # redirect the output to obj, 

пример

with open('foo.txt', 'w') as obj:
    print >> obj, "Hello world" # hello world now saved in foo.txt

Обновить:

В Python 3 можно дать аргумент файла непосредственно следующим образом:

print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
+36
источник

Другим случаем, связанным с print >>obj, "Hello World", является синтаксис "print chevron" для оператора print в Python 2 (удален в Python 3, заменен аргументом file print() ). Вместо записи на стандартный вывод выходной сигнал передается методу obj.write(). Типичным примером могут быть файловые объекты, имеющие метод write(). См. Ответ на более поздний вопрос: Двойной знак большего размера в Python.

+10
источник

12 << 2

48

Фактическое двоичное значение 12 равно "00 1100", когда мы выполняем вышеприведенный оператор. Сдвиг влево (сдвиг влево на 2 позиции) возвращает значение 48, его двоичное значение равно "11 0000".

48 >> 2

12

Двоичное значение 48 равно "11 0000", после выполнения вышеприведенного оператора "Сдвиг вправо" (2 места смещено вправо) возвращает значение 12, его двоичное значение равно "00 1100".

+9
источник

Это операторы сдвига shift operators

x & lt; & lt; y Возвращает x с битами, сдвинутыми влево на y мест (и новые биты с правой стороны - нули). Это так же как умножение х на 2 ** у.

x >> y Возвращает x с битами, сдвинутыми в прямо у мест. Это так же, как //'x на 2 ** y.

+6
источник

Это оператор сдвига битов, который существует во многих основных языках программирования, << - это сдвиг влево, а >> - это сдвиг вправо, их можно продемонстрировать в виде следующей таблицы, предполагая, что целое число занимает только 1 байт в памяти.

| operate | bit value | octal value |                       description                        |
| ------- | --------- | ----------- | -------------------------------------------------------- |
|         | 00000100  |           4 |                                                          |
| 4 << 2  | 00010000  |          16 | move all bits to left 2 bits, filled with 0 at the right |
| 16 >> 2 | 00000100  |           4 | move all bits to right 2 bits, filled with 0 at the left |
+2
источник

Это битовые операторы сдвига.

4 << 4 Это то же самое, что умножить x на 2 y. **

2 ** 4

16 * 4

64

121 >> 4

Это то же самое, что делить x на 2 y. **

121//2

60//2

30//2

15//2

7

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос