Performing Rotations in C

Last modified by Microchip on 2024/01/29 20:41

The C language has operators to perform left and right bitwise shift operations (« and ») but it does not have a rotate operator. When rotating, any bit shifted out of the value is shifted back into the now-empty bit location.

However, simple expressions can be used to obtain a rotated value. For example, to rotate an 8-bit wide unsigned variable, c, one bit to the left, the following code can be used:

c = (c << 1) | (c >> 7);

To rotate a 16-bit wide unsigned variable, i, two bits to the right, you could use:

i =  (i >> 2) | (i << 14);

From these expressions, you can see that rotating a byte one bit to the left, for example, is the same as rotating it seven bits to the right. And here’s a bonus of using statements such as those above: If you are using the MPLAB® XC8 compiler, it will detect that these operations perform a rotation and will use the 8-bit PIC® MCU device’s rotate instruction when possible.