Czy ktoś mógłby mi wyjaśnić, jak używać <<
i >>
w Go? Myślę, że jest podobny do niektórych innych języków.
go
bitwise-operators
brianoh
źródło
źródło
Ze specyfikacji na http://golang.org/doc/go_spec.html wynika, że przynajmniej w przypadku liczb całkowitych jest to przesunięcie binarne. na przykład binarne 0b00001000 >> 1 będzie równe 0b00000100, a 0b00001000 << 1 będzie równe 0b00010000.
Go najwyraźniej nie akceptuje notacji 0b dla binarnych liczb całkowitych. Użyłem go tylko jako przykład. W systemie dziesiętnym 8 >> 1 to 4, a 8 << 1 to 16. Przesunięcie w lewo o jeden jest tym samym, co pomnożenie przez 2, a przesunięcie w prawo o jeden to to samo, co podzielenie przez dwa, z odrzuceniem pozostałej części.
źródło
Operatory << i >> to operatory arytmetyczne Go .
źródło
Są to w zasadzie operatory arytmetyczne i tak samo jest w innych językach. Oto podstawowy przykład PHP, C, Go
UDAĆ SIĘ
GO Demo
do
C Demo
PHP
Demo PHP
Wszystkie wyjdą
źródło
Go << i >> są podobne do przesunięć (to znaczy: dzielenia lub mnożenia przez potęgę 2) w innych językach, ale ponieważ Go jest bezpieczniejszym językiem niż C / C ++, wykonuje dodatkową pracę, gdy liczba zmian jest liczbą .
Instrukcje zmiany w procesorach x86 uwzględniają tylko 5 bitów (6 bitów w 64-bitowych procesorach x86) liczby przesunięć. W językach takich jak C / C ++ operator shift tłumaczy na pojedynczą instrukcję procesora.
Poniższy kod Go
wydruki
podczas gdy program C / C ++ będzie drukował
źródło
<<
lub>>
w C ++?<<
to przesunięcie w lewo.>>
jest przesunięciem w prawo rozszerzającym znak, gdy lewy operand jest liczbą całkowitą ze znakiem, i przesunięciem w prawo rozszerzającym o zero, gdy lewy operand jest liczbą całkowitą bez znaku.Aby lepiej zrozumieć,
>>
pomyślZatem po zastosowaniu do liczby całkowitej bez znaku bity po lewej stronie są wypełnione zerem, podczas gdy w przypadku liczby całkowitej ze znakiem, bity po lewej stronie są wypełniane bitem znajdującym się najbardziej po lewej stronie (czyli 1, gdy liczba całkowita ze znakiem jest ujemna, jak na 2 komplement).
źródło
W matematyce dziesiętnej , gdy mnożymy lub dzielimy przez 10 , wpływamy na zera na końcu liczby.
W binarnym , 2 ma ten sam efekt. Więc dodajemy zero na końcu lub usuwamy ostatnią cyfrę
źródło