Wystarczy rozwinąć na odpowiedź Marca trochę (Marc, prosimy o uwzględnienie tego w Ciebie i będę usunąć tę odpowiedź) jest to określone w punkcie 7.8 specyfikacji:
The predefiniowane operatory zmian są wymienione poniżej.
Przesunięcie lewej:
- Int operatora < < (int x int liczba);
- uint operator < < (uint x, int count);
- długi operator < < (długi x, liczba int);
- ulong operator < < (ulong x, int count);
Operator < < przesuwa x w lewo o liczbę bitów obliczoną w sposób opisany poniżej.
Bity wyższego rzędu spoza zakresu typu wyniku x są odrzucane, pozostałe bity są przesuwane w lewo, a pozycje pustego bitu niskiego rzędu są zerowane.
Przesunięcie w prawo:
- int operator >> (int x, int count);
- operator uint >> (uint x, int count);
- długi operator >> (długie x, liczba int);
- Operator ulong >> (ulong x, int count);
Operator >> przesuwa x w prawo o liczbę bitów obliczoną w sposób opisany poniżej.
Gdy x jest typu int lub long, bity niskiego rzędu z x są odrzucane, pozostałe bity są przesuwane w prawo, a pozycje pustych bitów wysokiego rzędu są ustawione na zero, jeśli x jest nieujemne i ustawione do jednego, jeśli x jest ujemne.
Gdy x jest typu uint lub ulong, bity niskiego rzędu z x są odrzucane, pozostałe bity są przesuwane w prawo, a pozycje pustych bitów o wysokim porządku są ustawione na zero.
dla predefiniowanych operatorów, liczba bitów do przesuwnego jest obliczana w następujący sposób:
Gdy typ x int lub uint liczba przesunięcia jest przez niskiego rzędu pięciu bitów liczby. Innymi słowy, liczba zmian jest obliczana z liczby & 0x1F.
Gdy typ x jest długi lub ulong, liczba przesunięć jest podana przez małe liczby bitów o mniejszej wartości. Innymi słowy, liczba zmian jest obliczana z liczby & 0x3F.
Jeśli wynikowa liczba zmian wynosi zero, operatory przesunięcia po prostu zwracają wartość x.
Witam, czy mogę prosić o wyjaśnienie więcej? W pierwszym, dlaczego mam 0x200000000, a w drugim dlaczego mam 16000? Dziękuję bardzo –
To tak, jakby powiedzieć "dlaczego 1 * 50000 różni się od 1000 * 8" - ponieważ robisz bardzo różne rzeczy. Pierwsza to 2^33 ("moc"), druga to 1000 * 16. –
ok Rozumiem różnicę między 2^33 i 1000 * 16 Chcę wiedzieć dlaczego 2^32 –