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));

Zobacz też edytuj