Я помічаю, що можу робити такі речі, як 2 << 5
отримати 64 і 1000 >> 2
отримати 250.
Також я можу використовувати >>
в print
:
print >>obj, "Hello world"
Що тут відбувається?
Я помічаю, що можу робити такі речі, як 2 << 5
отримати 64 і 1000 >> 2
отримати 250.
Також я можу використовувати >>
в print
:
print >>obj, "Hello world"
Що тут відбувається?
Відповіді:
Я думаю, що це важливе питання, і на нього поки що немає відповіді (ОП, схоже, вже знає про операторів зміни). Дозвольте спробувати відповісти, оператор >> у вашому прикладі використовується для двох різних цілей. У термінах с ++ цей оператор перевантажений. У першому прикладі він використовується як побітовий оператор (зсув ліворуч), тоді як у другому сценарії він використовується просто як перенаправлення вихідних даних. тобто
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 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
<<
,>>
,&
,|
,~
, і^
робити?