- /*
-
- 编写一个移位函数,使移位函数既能循环左移又能循环右移。参数n大于0时便是左移,参数n小于0时便是右移
-
- 解释:循环右移:把右边移出的位放到左边移入的位
- 如: 1101 0101 1100 循环左移四位 0101 1100 1101
-
- 循环左移:把左边移出的位放到右边移入的位
-
-
- */
- #include <stdio.h>
- /**
- * 打印出二进制
- *
- * @param num 要打印的数字
- */
- void printBianry(int num)
- {
- int length = sizeof(num)*8; //这句话是废话,反正我也照这个写了
-
- for (int i=0; i<length; i++)
- {
- printf("%d",(num>>(31-i)) & 1);
- }
- printf("\n");
- }
- /**
- * 循环移动,考虑正数和负数
- *
- * @param num 要传入的数值,该值为无符号整形
- * @param n 负数表示右移,移动的长度是-n,正数表示左移,移动的长度为n
- */
- int BianryCircleMoving(unsigned num,int n)
- {
- if (n<0)
- {// 表示右移 长度为-n
- num = (num >> (-n)) | (num << (32+n));
- }
- else
- {// 表示左移,长度为n
- num = (num << n) | (num >> (32-n));
- }
-
- return num;
- }
- int main(int argc, const char * argv[])
- {
- int num = 0;
- printf("请输入你要移动的数据:\n");
- scanf("%d",&num);
-
- int length = 0;
- printf("请输入你要移动的方向以及位数(-1表示向右移动一位,1表示左移一位):\n");
- scanf("%d",&length);
-
- printBianry(num);
-
- int result = BianryCircleMoving(num, length);
-
- printBianry(result);
-
- return 0;
- }
复制代码请输入你要移动的数据: -2 请输入你要移动的方向以及位数(-1表示向右移动一位,1表示左移一位): 4 11111111111111111111111111111110 11111111111111111111111111101111 -17Program ended with exit code: 0
|