编写循环移位函数

71 阅读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