Что делать >> и << означает в 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