Co to jest przesunięcie arytmetyczne?

Przesunięcie arytmetyczne to sposób mnożenia lub dzielenia liczb. Przesunięcia arytmetyczne są zazwyczaj wykonywane na liczbach binarnych. Pojęcie to ma jednak zastosowanie do każdego schematu numeracji.

Poniżej znajduje się przykład użycia liczb dziesiętnych, których podstawą jest dziesięć. Kiedy 250 jest arytmetycznie przesunięte w lewo, wynikowa liczba to 2500, czyli 250 pomnożone przez dziesięć. Gdy 250 reprezentowane za pomocą 4 cyfr jako 0250, jest arytmetycznie przesunięte w prawo, wynikową liczbą jest 0025, czyli 250 podzielone przez dziesięć. Więc bardziej poprawne jest stwierdzenie, że przesunięcie arytmetyczne jest sposobem mnożenia lub dzielenia liczb przez podstawę schematu liczbowego.

Liczby binarne mają 2 jako podstawę; są reprezentowane za pomocą zer i jedynek i mogą być ze znakiem lub bez. W arytmetycznym przesunięciu w lewo liczby są przesuwane o jedno miejsce w lewo, a po prawej stronie jest zero. W arytmetycznym przesunięciu w prawo liczby są przesuwane o jedno miejsce w prawo, przy czym liczba po lewej stronie jest zachowywana po lewej stronie. Ogólnie rzecz biorąc, przesunięcie może dotyczyć „n” spacji.

W liczbach binarnych bez znaku każda pozycja jest potęgą 2, więc binarne 1 to dziesiętne 1, binarne 10 to dziesiętne 2, binarne 100 to dziesiętne 4 i tak dalej. Tak więc 0110 jest liczbą dziesiętną 6. Gdy wykonywane jest arytmetyczne przesunięcie w lewo, wynikiem jest 1100, co jest liczbą dziesiętną 12. Gdy wykonywane jest arytmetyczne przesunięcie w prawo, wynikiem jest 0011, co jest liczbą dziesiętną 3.

Ponieważ liczby mogą być zarówno dodatnie, jak i ujemne, używane są liczby binarne ze znakiem, w których skrajny lewy bit to 0 dla liczby dodatniej lub zero, a 1 dla liczby ujemnej. Tak więc dla liczb 4-bitowych, 0111, co jest liczbą dziesiętną 7, jest największą liczbą dodatnią. Schemat najczęściej używany dla liczb ujemnych ma 1111 jako dziesiętny -1, a to idzie aż do 1000, czyli dziesiętnego -8.

Na przykład arytmetyczne przesunięcie w lewo na 1101, które jest dziesiętne -3, daje wynik 1010, który jest dziesiętny -6. Arytmetyczne przesunięcie w prawo 1010, czyli dziesiętne -6, daje 1101, czyli dziesiętne -3. Zauważ, że zachowany jest skrajny lewy bit.
Przesunięcie arytmetyczne nie zawsze odpowiada mnożeniu i dzieleniu dla każdej liczby w schemacie liczbowym. Na obu końcach schematu numerów istnieją ograniczenia. Na przykład przesunięcie w lewo o 0111, dziesiętne 7, daje dziesiętne -2, a przesunięcie w prawo o 1111, dziesiętne -1, daje dziesiętne -1.
Przesunięcie arytmetyczne ma wrodzoną prostotę i jest znacznie szybsze do wykonania niż normalne mnożenie i dzielenie. Tak więc komputery obsługują tę operację za pomocą stosunkowo prostego mechanizmu zwanego jednostką przesuwną lub rejestrem przesuwnym. Doświadczeni programiści korzystają z tej operacji tak długo, jak unika się wspomnianych powyżej ograniczeń lub je uwzględnia.