Bit rotation is similar to the bit shift process.
However, in this case you do not "lose" the bits that extrapolate the size of your variable (most significant or least significant, depending on the direction of rotation). These bits are repositioned at the opposite end. That is, the most significant becomes the least significant or the opposite if the rotation is in the opposite direction. This image illustrates well.
For example:
Assuming valor
is:
valor = 1; // 0001 usando 4 bits para exemplo.
If you rotate this value to the right:
O 1 foi para o início.
v
1000 // 1 vez
0100 // 2 vezes
0010 // 3 vezes
0001 // 4 vezes
If you rotate this value to the left:
0010 // 1 vez
0100 // 2 vezes
1000 // 3 vezes
This is the pure bit offset because, comparing with the rotation to the right in the first case, if you shift right once the result would be zero, because it would add a zero where it was 1.