1 题目
功能:编写循环移位函数 描述:编写个移位函数,使移位函数既能循环左移又能循环右移。参数 n 大于 0 时表示左移,参数 n 小于 0 时表示右移。例如 n=-4, 表示要右移四位
2 思路
利用 << 或者 >> 进行移位计算
3 代码
#include <stdio.h>
#include <stdlib.h>
/**
功能:编写循环移位函数
描述:编写个移位函数,使移位函数既能循环左移又能循环右移。参数 n 大于 0 时表示左移,参数 n 小于 0 时表示右移。例如 n=-4, 表示要右移四位
**/
unsigned move(unsigned value, int n){// 自定义移位函数
unsigned z;
if(n>0) {
z = (value >> (32-n)) | (value << n);// 循环左移的实现过程
}
else {
n=-n;
z = (value << (32-n)) | (value >> n);// 循环右移的实现过程
}
return z;
}
int main(int argc, char const *argv[]) {
unsigned a;
int n;
printf("请输入一个八进制数:\n");
scanf("%o", &a);// 输入一个八进制数
printf("请输入要移位的位数:\n");
scanf("%d", &n);// 输入要移位的位数
printf("移位后的结果是:%o\n", move(a, n));// 将移位后的结果输出
}
示例结果:
请输入一个八进制数:
12
请输入要移位的位数:
1
移位后的结果是:24