exc/k&r/02-types-operators-and-exp/02-08.c

37 lines
703 B
C

#include <stdio.h>
#include <stdlib.h>
#include "02-bitwise.h"
unsigned rightrot(unsigned x, int n);
/* parse command line args for rightrot, print result */
int main(int argc, char *argv[])
{
if (argc < 3) {
printf("error : expected 2 arguments x n\n");
return 1;
}
unsigned x;
int bx = int_of_string(&x, argv[1]);
int n = atoi(argv[2]);
if (!bx) {
return 2;
}
printd_base(bx, rightrot(x, n));
putchar('\n');
return 0;
}
/* rightrot: right rotate x by n bit positions */
unsigned rightrot(unsigned x, int n)
{
int p = 0;
while (x >> p) {
p++;
}
n %= p;
return (x >> n) | ((~(~0 << n) & x) << (p - n));
}