Я замечаю, что могу 2 << 5
получить 64 и 1000 >> 2
250.
Также могу использовать >>
в print
:
print >>obj, "Hello world"
Что здесь происходит?
Я замечаю, что могу 2 << 5
получить 64 и 1000 >> 2
250.
Также могу использовать >>
в print
:
print >>obj, "Hello world"
Что здесь происходит?
Ответы:
Я думаю, что это важный вопрос, и на него еще нет ответа (OP, похоже, уже знает об операторах сдвига). Позвольте мне попытаться ответить, оператор >> в вашем примере используется для двух разных целей. В терминах 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
__rshift__
и __lshift__
методы.
Это операторы побитового сдвига.
Цитата из документов :
x << y
Возвраты x
со сдвигом битов влево на y разрядов (а новые биты справа равны нулю). Это то же самое, что и умножение x
на 2**y
.
x >> y
Возвращает x
со смещением битов вправо на y разрядов. Это то же самое, что и деление x
на 2**y
.
print bin(1)
, print bin(1 << 1)
, print bin(17)
, print bin(17 >> 1)
и так далее. Вы можете увидеть, как это работает, без пояснений.
print >>obj, "Hello world"
2 << 5
и 1000 >> 2
¯_ (ツ) _ / ¯
12 << 2
48
Фактическое двоичное значение 12 равно «00 1100», когда мы выполняем вышеуказанный оператор. Сдвиг влево (сдвиг влево на 2 позиции) возвращает значение 48, его двоичное значение равно «11 0000».
48 >> 2
12
Двоичное значение 48 равно «11 0000», после выполнения вышеуказанного оператора «Сдвиг вправо» (сдвиг вправо на 2 разряда) возвращает значение 12, его двоичное значение равно «00 1100».
Другой случай print >>obj, "Hello World"
- это синтаксис «print chevron» для print
оператора в Python 2 (удален в Python 3, заменен file
аргументом print()
функции ). Вместо записи в стандартный вывод вывод передается в obj.write()
метод. Типичным примером могут быть файловые объекты, имеющие write()
метод. См. Ответ на более свежий вопрос: двойной знак «больше» в Python .
Это оператор битового сдвига, который существует во многих основных языках программирования, <<
это левый сдвиг и >>
правый сдвиг, их можно продемонстрировать в следующей таблице, предполагая, что целое число занимает только 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 |
Это операторы сдвига
x << y Возвращает x со смещением битов влево на y позиций (а новые биты справа равны нулю). Это то же самое, что и умножение x на 2 ** y.
x >> y Возвращает x со смещением битов вправо на y позиций. Это то же самое, что // присвоить x на 2 ** y.
<< Mean any given number will be multiply by 2the power
for exp:- 2<<2=2*2'1=4
6<<2'4=6*2*2*2*2*2=64
<<
,>>
,&
,|
,~
, и^
делать?