2 << 5
64 ve 1000 >> 2
250 almak gibi şeyler yapabildiğimi fark ettim .
Ayrıca ben kullanabilir >>
in print
:
print >>obj, "Hello world"
Burada ne oluyor?
2 << 5
64 ve 1000 >> 2
250 almak gibi şeyler yapabildiğimi fark ettim .
Ayrıca ben kullanabilir >>
in print
:
print >>obj, "Hello world"
Burada ne oluyor?
Yanıtlar:
Bunun önemli bir soru olduğunu düşünüyorum ve henüz cevaplanmadı (OP, vardiya operatörlerini zaten biliyor gibi görünüyor). Cevap vermeye çalışayım, örneğinizdeki >> operatörü iki farklı amaç için kullanılıyor. C ++ terimleriyle bu operatör aşırı yüklenmiştir. İlk örnekte, bitsel operatör (sola kaydırma) olarak kullanılırken, ikinci senaryoda yalnızca çıktı yeniden yönlendirmesi olarak kullanılır. yani
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'te dosya argümanını aşağıdaki gibi doğrudan vermek mümkündür:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
__rshift__
ve __lshift__
yöntemleri aracılığıyla geçersiz kılabilirsiniz .
Bunlar bitsel kaydırma operatörleri.
Dokümanlardan alıntı :
x << y
İade x
bit (sıfırdır sağ tarafında ve yeni bit) y yerlerine göre sola kaydırılır. Bu çarpılması ile aynıdır x
göre 2**y
.
x >> y
İade x
bit ile y yerlere sağa kaydırılır. Bu bölme ile aynıdır x
göre 2**y
.
print bin(1)
, print bin(1 << 1)
, print bin(17)
, print bin(17 >> 1)
vb. Açıklamalar olmadan nasıl çalıştığını görebilirsiniz.
print >>obj, "Hello world"
2 << 5
ve 1000 >> 2
¯_ (ツ) _ / ¯
12 << 2
48
Yukarıdaki ifadeyi çalıştırdığımızda 12'nin gerçek ikili değeri "00 1100" dür. Sol kaydırma (sola kaydırılmış 2 yer), 48 değerini döndürür, bunun ikili değeri "11 0000" olur.
48 >> 2
12
48'in ikili değeri "11 0000" dir, yukarıdaki ifadeyi uyguladıktan sonra Sağa kaydırma (sağa kaydırılmış 2 basamak) 12 değerini döndürür, bunun ikili değeri "00 1100" dür.
Bunlar, birçok ana programlama dilinde var olan <<
, sola kaydırma ve >>
sağa kaydırma olan bit kaydırma operatörüdür , aşağıdaki tabloda gösterilebilirler, bir tamsayının bellekte yalnızca 1 bayt aldığını varsayarlar.
| 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 |
İçerdiği diğer durum , Python 2'deki ifadeprint >>obj, "Hello World"
için "yazdırma köşeli çift ayraç" sözdizimidir (Python 3'te kaldırılmıştır , işlevin argümanı ile değiştirilmiştir ). Standart çıktıya yazmak yerine çıktı yönteme aktarılır . Tipik bir örnek, bir yöntemi olan dosya nesneleri olabilir . Daha yeni bir sorunun cevabına bakın: Python'da oturumdan iki kat büyük .print
file
print()
obj.write()
write()
Bunlar vardiya operatörleri
x << y Bitleri sola y basamak kaydırarak x'i döndürür (ve sağ taraftaki yeni bitler sıfırdır). Bu, x'i 2 ** y ile çarpmakla aynıdır.
x >> y Bitler sağa y basamak kaydırılmış olarak x'i döndürür. Bu, x'i 2 ** y'ye // yerleştirmekle aynıdır.
<< 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
Aşağıdakileri hem Python 2.7 hem de Python 3.8'de doğruladım
Baskı yaptım (100 << 3) 100'ü İkili'ye çevirmek 1100100 verir. Yaptığım şey ilk 3 biti düşürmek ve sonunda '0' değerine sahip 3 bit eklemek oldu. Yani 0100000 olarak sonuçlanmalı ve bunu Decimal'e çevirdim ve cevap 32 idi.
Yazdırmayı (100 << 3) çalıştırdığım zamanki sürprizim için cevap 800'dü. Şaşırmıştım. Neler olduğunu kontrol etmek için 800'ü Binary'ye çevirdim. Ve bu 1100100000 aldığım şey.
800'ün Python cevabının nasıl olduğunu görürseniz, ilk 3 biti kaydırmadılar veya düşürmediler, ancak son 3 bit için '0' değerini eklediler.
Baskı olarak nerede (100 >> 3), mükemmel çalıştı. Manuel hesaplama yaptım ve yazdırma sonucunu python'dan kontrol ettim. Doğru çalıştı. Son 3 bit düşürüldü ve ilk 3 bit'e '0' değeri eklendi.
Görünüşe göre (100 << 3), sol kaydırma operatörünün Python'da bir hatası var.
<<
,>>
,&
,|
,~
, ve^
bunu?