2-8 编写一个函数rightsort(x,n), 该函数返回将x循环右移n位后得到的值。
#include<stdio.h> unsigned rightrot(unsigned x,unsigned n); int main(){ unsigned x=5; unsigned n=1; unsigned result; result = rightrot(x,n); printf("%d\n",result); return 0; } unsigned rightrot(unsigned x,unsigned n) { while(n>0) { if((x&1)==1) x= (x>>1) | ~(~0U >> 1); else x=x>>1; n--; } return x; }
下边这个函数也行,注意 ~(~0U >> 1) 与 ~0U << (size-1) 效果是一样的,学习size的用法
#include <limits.h> unsigned rightrot(unsigned x, unsigned n) { int size= sizeof(x) * CHAR_BIT; while (n > 0) { if ((x & 1) == 1) x = (x >> 1) | (~0U << (size-1)); else x = (x >> 1); n--; } return x; }