Zauważam, że mogę na przykład 2 << 5
zdobyć 64 i 1000 >> 2
250.
Mogę również używać >>
w print
:
print >>obj, "Hello world"
Co tu się dzieje?
Zauważam, że mogę na przykład 2 << 5
zdobyć 64 i 1000 >> 2
250.
Mogę również używać >>
w print
:
print >>obj, "Hello world"
Co tu się dzieje?
Odpowiedzi:
Myślę, że to ważne pytanie, na które jeszcze nie ma odpowiedzi (wydaje się, że PO już wie o operatorach zmianowych). Spróbuję odpowiedzieć, operator >> w twoim przykładzie jest używany do dwóch różnych celów. W terminach C ++ ten operator jest przeciążony. W pierwszym przykładzie jest używany jako operator bitowy (przesunięcie w lewo), podczas gdy w drugim scenariuszu jest używany tylko jako przekierowanie wyjścia. to znaczy
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
W Pythonie 3 można bezpośrednio podać argument pliku w następujący sposób:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
__rshift__
i __lshift__
.
Są to operatory przesunięcia bitowego.
Cytując z dokumentów :
x << y
Zwraca x
z bitami przesuniętymi w lewo o y miejsca (a nowe bity po prawej stronie są zerami). To to samo, co pomnożenie x
przez 2**y
.
x >> y
Wraca x
z bitami przesuniętymi w prawo o y miejsc. To to samo, co dzielenie x
przez 2**y
.
print bin(1)
, print bin(1 << 1)
, print bin(17)
, print bin(17 >> 1)
i tak dalej. Możesz zobaczyć, jak to działa bez wyjaśnień.
print >>obj, "Hello world"
2 << 5
i 1000 >> 2
¯_ (ツ) _ / ¯
12 << 2
48
Rzeczywista wartość binarna 12 to „00 1100”, gdy wykonujemy powyższą instrukcję. Przesunięcie w lewo (przesunięcie o 2 miejsca w lewo) zwraca wartość 48, a wartość binarna to „11 0000”.
48 >> 2
12
Wartość binarna 48 to „11 0000”, po wykonaniu powyższej instrukcji Przesunięcie w prawo (o 2 miejsca przesunięte w prawo) zwraca wartość 12, jej wartość binarna to „00 1100”.
Innym przypadkiem print >>obj, "Hello World"
jest składnia „print chevron” dla print
instrukcji w Pythonie 2 (usunięta w Pythonie 3, zastąpiona file
argumentem print()
funkcji ). Zamiast zapisywać na standardowe wyjście, dane wyjściowe są przekazywane do obj.write()
metody. Typowym przykładem mogą być obiekty plików posiadające write()
metodę. Zobacz odpowiedź na nowsze pytanie: Podwójny znak większy niż w Pythonie .
Są operatorem przesunięcia bitowego, który istnieje w wielu głównych językach programowania, <<
jest przesunięciem w lewo i >>
jest przesunięciem w prawo, można je zademonstrować w poniższej tabeli, zakładając, że liczba całkowita zajmuje tylko 1 bajt w pamięci.
| 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 |
To są operatorzy zmian
x << y Zwraca x z bitami przesuniętymi w lewo o y miejsca (a nowe bity po prawej stronie są zerami). To to samo, co pomnożenie x przez 2 ** y.
x >> y Zwraca x z bitami przesuniętymi w prawo o y miejsc. To jest to samo, co // '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
<<
,>>
,&
,|
,~
, i^
zrobić?