Apa arti >> dan << dalam Python?

90

Saya perhatikan bahwa saya dapat melakukan hal-hal seperti 2 << 5mendapatkan 64 dan 1000 >> 2mendapatkan 250.

Juga bisa saya gunakan >>di print:

print >>obj, "Hello world"

Apa yang terjadi disini?

pengguna3201152
sumber
3
Di sini, sekarang Anda dapat memasukkan simbol-simbol tersebut ke mesin pencari dan membuatnya benar-benar mencarinya: symbolhound.com
user2357112 mendukung Monica
kemungkinan duplikat Operasi dan Penggunaan Bitwise
vaultah
3
@ user2357112 Itu akan sangat membantu, terima kasih. Dan bagi mereka yang mengatakan itu adalah pertanyaan dasar, mungkin saja, tetapi saya tidak memiliki konsep operator bitwise, jadi saya tidak akan pernah berpikir untuk mencarinya di dokumentasi ...
user3201152
@joaquin sekarang hasil nomor satu di google karena python lebih besar dari.
Jordan Reiter

Jawaban:

63

Saya kira ini pertanyaan penting dan belum terjawab (sepertinya OP sudah tahu tentang operator shift). Izinkan saya mencoba menjawab, >> operator dalam contoh Anda digunakan untuk dua tujuan berbeda. Dalam istilah c ++ operator ini kelebihan beban. Pada contoh pertama digunakan sebagai operator bitwise (shift kiri), sedangkan pada skenario kedua hanya digunakan sebagai output redirection. yaitu

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, 

contoh

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

memperbarui:

Dalam python 3 dimungkinkan untuk memberikan argumen file secara langsung sebagai berikut:

print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
yosemite_k
sumber
11
FYI bahwa penggunaan umum lain dari operator shift kanan yang mungkin Anda lihat dalam kode Python akan terjadi di file Airflow. Kerangka Airflow membebani operator '>>' untuk menunjukkan satu tugas upstream dari yang lain: stackoverflow.com/questions/52389105/…
schimmy
3
Anda sebenarnya dapat mengganti operator ini melalui metode __rshift__dan __lshift__.
trudolf
Saya mendapatkan bahwa 2 >> 5 sama dengan 0. Saya pikir itu harus sama dengan 0,0001?
lightbox142
1
@ teter123f operasinya adalah biner. ini bukan operasi desimal.
yosemite_k
61

Ini adalah operator shift bitwise.

Mengutip dari dokumen :

x << y

Mengembalikan xdengan bit yang digeser ke kiri sebesar tempat y (dan bit baru di sisi kanan adalah nol). Ini sama dengan mengalikan xdengan 2**y.

x >> y

Mengembalikan xdengan bit yang digeser ke kanan sebesar y tempat. Ini sama dengan membagi xdengan 2**y.

James
sumber
2
Mungkin contoh akan membantu, ketik serangkaian tersebut dengan Python: print bin(1), print bin(1 << 1), print bin(17), print bin(17 >> 1)dan sebagainya. Anda dapat melihat cara kerjanya tanpa penjelasan.
bartekbrak
4
Operator bit shift membutuhkan 2 operan jadi mengapa operan adalah "print" dan operan 2 sebuah objek? seperti dalamprint >>obj, "Hello world"
Qi Fan
Ini adalah jawaban untuk konteks yang disediakan OP (dan dengan demikian diketahui OP) dan bukan untuk pertanyaan yang diajukan.
z33k
@Qi Fan @ z33k Pertanyaan diedit untuk menambah referensi untuk dicetak lebih dari setahun setelah jawaban ini ditulis. Pertanyaan asli hanya disebutkan 2 << 5dan 1000 >> 2 ¯_ (ツ) _ / ¯
James
24

12 << 2

48

Nilai biner sebenarnya dari 12 adalah "00 1100" ketika kita mengeksekusi pernyataan di atas. Shift kiri (2 tempat bergeser ke kiri) mengembalikan nilai 48 nilai binernya adalah "11 0000".

48 >> 2

12

Nilai biner 48 adalah "11 0000", setelah menjalankan pernyataan di atas Pergeseran kanan (2 tempat bergeser ke kanan) mengembalikan nilai 12 nilai binernya adalah "00 1100".

PAC
sumber
12

Kasus lain yang melibatkan print >>obj, "Hello World"adalah sintaks "print chevron" untuk print pernyataan di Python 2 (dihapus dengan Python 3, diganti dengan fileargumen print() fungsi ). Alih-alih menulis ke keluaran standar, keluaran tersebut diteruskan ke obj.write()metode. Contoh tipikal adalah objek file yang memiliki write()metode. Lihat jawaban untuk pertanyaan yang lebih baru: Tanda ganda lebih besar dari pada Python .

chrstphrchvz
sumber
11

Mereka adalah operator bit shift yang ada di banyak bahasa pemrograman mainstream, <<merupakan shift kiri dan >>shift kanan, mereka dapat ditunjukkan seperti tabel berikut, asumsikan integer hanya membutuhkan 1 byte dalam memori.

| 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 |
Tsingyi
sumber
Mencari penjelasan ini dengan tepat.
shaik moeed
7

Ini adalah operator shift

x << y Mengembalikan x dengan bit yang digeser ke kiri sebesar tempat y (dan bit baru di sisi kanan adalah nol). Ini sama dengan mengalikan x dengan 2 ** y.

x >> y Mengembalikan x dengan bit yang digeser ke kanan sebanyak y tempat. Ini sama dengan // 'ing x by 2 ** y.

doctorlove
sumber
0
<< 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
Mayank Awasthi
sumber