编写循环移位函数 描述:编写个移位函数,使移位函数既能循环左移又能循环右移

122 阅读1分钟

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