把高位移出放在低位。
第五题的答案是不是不对啊?怎么我输入2和1竟然不是3。2的二进制是10,1的是01,那么左移然后把高位的移到低位不应该是二进制11吗,也就是十进制3啊,我的为什么是4?程序代码:
5.编写一个函数,该函数将一个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; }