//将x循环右移n位(从最右端移出的位从最左端移入)
#include <stdio.h>
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;
}
int main(void)
{
unsigned x;
int n;
for(x = 0; x < 700; x += 49)
for(n = 1; n < 8; n++)
printf("%u, %d: %u\n", x, n, rightrot(x, n));
return 0;
}
本文探讨了如何通过位操作实现x循环右移n位,包括核心算法与具体实现细节,通过实例展示其应用。
607

被折叠的 条评论
为什么被折叠?



