黑马程序员技术交流社区
标题: 左移与右移问题 [打印本页]
作者: 大家叫我小祥子 时间: 2015-4-17 22:34
标题: 左移与右移问题
- /*
-
- 编写一个移位函数,使移位函数既能循环左移又能循环右移。参数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
作者: 大家叫我小祥子 时间: 2015-4-17 22:38
波波 你丫的,教你你还说我山寨,以后别想我教你了
作者: wws 时间: 2015-4-17 23:24
赞一个!
作者: 大家叫我小祥子 时间: 2015-4-17 23:38
以为自己写的会有点不一样,尼玛,居然和答案差不了多少,蛋疼
此贴终结
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |