summaryrefslogtreecommitdiff
path: root/ch2/2-08.c
blob: 9f7adbd14131823ced39ed0946345c85bc64f4c0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>

/*
 * Returns the value of the integer x rotated to the right by n bit positions.
 */

unsigned rightrot(unsigned x, int n) {
    unsigned mask = ~(~0 >> 1);

    while (n-- > 0)
        if (x & 1)
            x = (x >> 1) | mask;
        else
            x >>= 1;

    return x;
}

int main() {
    printf("%x\n", rightrot(0xaa, 3));
}