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?
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?
Jawaban:
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,
with open('foo.txt', 'w') as obj:
print >> obj, "Hello world" # hello world now saved in foo.txt
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
__rshift__dan __lshift__.
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.
print bin(1), print bin(1 << 1), print bin(17), print bin(17 >> 1)dan sebagainya. Anda dapat melihat cara kerjanya tanpa penjelasan.
print >>obj, "Hello world"
2 << 5dan 1000 >> 2 ¯_ (ツ) _ / ¯
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".
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 .
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 |
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.
<< 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
<<,>>,&,|,~, dan^lakukan?