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

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

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

print >>obj, "Hello world"

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

Ответы

Ответ 1

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

Цитата из docs:

x << y

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

x >> y

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

Ответ 2

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

Ответ 3

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

Ответ 4

12 << 2

48

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

48 >> 2

12

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

Ответ 5

Это операторы сдвига 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 |

Ответ 7

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

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

2 ** 4

16 * 4

64

121 >> 4

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

121//2

60//2

30//2

15//2

7