Saya perhatikan bahwa saya dapat melakukan hal-hal seperti 2 << 5
mendapatkan 64 dan 1000 >> 2
mendapatkan 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 << 5
mendapatkan 64 dan 1000 >> 2
mendapatkan 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 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 sebesar y tempat. Ini sama dengan membagi x
dengan 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 << 5
dan 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 file
argumen 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?