Obrót bitowy – Wikipedia, wolna encyklopedia
Obrót bitowy lub przesunięcie cykliczne – działanie na słowach bitowych polegająca na zmianie pozycji wszystkich bitów, w taki sposób, że bit o indeksie po wykonaniu obrotu o miejsc znajduje się na pozycji gdzie to liczba bitów w danym słowie. Ze względu na znak rozróżnia się obroty w lewo i w prawo
Przykład obrotu dla słowa 8-bitowego o 3 miejsca w lewo:
7 6 5 4 3 2 1 0 ← indeksy +---+---+---+---+---+---+---+---+ | a | b | c | d | e | f | g | h | przed obrotem +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ | d | e | f | g | h | a | b | c | po obrocie +---+---+---+---+---+---+---+---+ 4 3 2 1 0 7 6 5 ← indeksy przed obrotem
Obroty bitowe są implementowane w wielu procesorach; niektóre pozwalają także na wykonywanie obrotów przez znacznik przeniesienia (jedną z flag ALU), tj. rozszerzenie słowa o ten bit i dopiero wówczas wykonywany jest obrót bitowy:
CF 7 6 5 4 3 2 1 0 ← indeksy +---+ +---+---+---+---+---+---+---+---+ | X | | a | b | c | d | e | f | g | h | przed obrotem +---+ +---+---+---+---+---+---+---+---+ +---+ +---+---+---+---+---+---+---+---+ | c | | d | e | f | g | h | X | a | b | po obrocie +---+ +---+---+---+---+---+---+---+---+ 5 4 3 2 1 0 CF 7 6 ← indeksy przed obrotem
Np. w mikroprocesorach serii x86 istnieją instrukcje ROL
oraz ROR
wykonujące – odpowiednio – obrót w lewo i prawo, natomiast RCL
/RCR
wykonują obrót w lewo/prawo przez znacznik przeniesienia.
W popularnych językach programowania nie istnieją operatory, które wprost umożliwiałyby takie działanie. Mogą być jednak łatwo zrealizowane za pomocą dwóch przesunięć bitowych i jednej operacji sumy bitowej. Np. w języku C obrót w lewo 8-bitowego słowa można wykonać następująco:
y = (x << n) | (x >> (8-n));