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;
}
本文介绍了一种实现循环右移的函数rightrot,通过位操作完成整数的循环右移,提供了两种不同的实现方式,并解释了关键代码的作用。
2873





