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?
python
syntax
operator-keyword
user3201152
źródło
źródło
<<
,>>
,&
,|
,~
, i^
zrobić?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,
przykład
with open('foo.txt', 'w') as obj: print >> obj, "Hello world" # hello world now saved in foo.txt
aktualizacja:
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
źródło
__rshift__
i__lshift__
.Są to operatory przesunięcia bitowego.
Cytując z dokumentów :
Zwraca
x
z bitami przesuniętymi w lewo o y miejsca (a nowe bity po prawej stronie są zerami). To to samo, co pomnożeniex
przez2**y
.Wraca
x
z bitami przesuniętymi w prawo o y miejsc. To to samo, co dzieleniex
przez2**y
.źródło
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
i1000 >> 2
¯_ (ツ) _ / ¯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”.
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”.
źródło
Innym przypadkiem
print >>obj, "Hello World"
jest składnia „print chevron” dlaprint
instrukcji w Pythonie 2 (usunięta w Pythonie 3, zastąpionafile
argumentemprint()
funkcji ). Zamiast zapisywać na standardowe wyjście, dane wyjściowe są przekazywane doobj.write()
metody. Typowym przykładem mogą być obiekty plików posiadającewrite()
metodę. Zobacz odpowiedź na nowsze pytanie: Podwójny znak większy niż w Pythonie .źródło
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 |
źródło
To są operatorzy zmian
źródło
<< 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
źródło