Gjorni napisał(a)
Wklejony art nie odpowiada na moje pytanie.
A czego Ty oczekujesz? Że w każdym artykule będzie Twoje pytanie cytowane i udzielona na nie dokładna odpowiedź? Twoje pytanie dotyczy przesunięcia bitowego, więc w każdym artykule będzie ono opisane;
W podanym przeze mnie artykule masz dokładnie opisane przesunięcia bitowe w lewo i prawo, ze znakiem i bez, nawet przykłady są - wystarczy je na spokojnie przeanalizować;
Operator prawego przesunięcia bez znaku >>>
Działanie n >>> s to przesunięcie s bitów w n wliczając bit znaku (bit znaku traci swoją wyjątkowość i jest traktowany jak każdy inny bit).
Z przesunięciem bez znaku "wypełniaczem" staje się 0, co może zamazać bit znaku i zmienić znak wyniku, który zawsze będzie dodatni.
Próbując wyrazić działanie >>> wzorem stosuje się następującą zasadę - jeśli lewy operand jest dodatni, wtedy wynik jest identyczny z prawym przesunięciem ze znakiem. Jeśli jednak lewy operand jest ujemy, wtedy wynik równa się (n >> s) + (2 << ~s). I właśnie ten wzór mnie zmroził najbardziej. Aż mnie do tej pory ciarki przechodzą :)
Przykład: 11 >>> 3 = 11 >> 3 = 11 / 2^3 = 1
11 (binarnie) 0000 0000 0000 0000 0000 0000 0000 1011
przesunięcie o 3 0000 0000 0000 0000 0000 0000 0000 0001
wynik: 1 (dziesiętnie)
Przykład: -17 >>> 3 = 536870909
-17 (binarnie) 1111 1111 1111 1111 1111 1111 1110 1111
przesunięcie o 3 0001 1111 1111 1111 1111 1111 1111 1101
wynik: 536870909 (dziesiętnie)
Źródło: http://jlaskowski.blogspot.com/2012/01/o-operatorach-przesuniec-w-javieprawie.html