首页 > 试题广场 >

编写一个函数,该函数将一个unsigned int中的所有位

[问答题]

编写一个函数,该函数将一个unsigned int中的所有位向左旋转指定数量的位。例如,rotate_l(x,4)将x中的所有位向左移动4个位置,而且从左端丢失的位会重新出现在右端。也就是说,把从高位移出的位放入低位。在程序中测试该函数。

推荐
#include <stdio.h>
int rotate_l(unsigned int number, unsigned int bit);
int main(void)
{
 unsigned int number, bit;
 printf("input a hexadecimal number and rotated bits number (q to quit):");
 while( scanf("%x%d", &number, &bit) == 2 )
 {
 printf("%x rotate %d bit left : %x\n",  number, bit, rotate_l(number, bit));
 printf("input a number(q to quit):");
 }
 printf("quit\n");
 return 0;
}
int rotate_l(unsigned int number, unsigned int bit)
{
 unsigned int i;
 unsigned int hign = 8 * sizeof(unsigned int);//最高位
 for (i=0; i<bit; i++)
 if( number&( 1<<(hign-1) ) ) number = (number << 1) | 1;
 else number = number << 1;
 return number;
}

发表于 2018-03-14 11:57:04 回复(0)