37 lines
703 B
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));
|
|
}
|