原题链接:[编程入门]自定义函数之通用位移
解题思路:
在move函数中根据n的正负来决定value是左移还是右移:
n >= 0: 右移。使用>>运算符将value右移n位,并使用<< 运算符将value左移bits-n位,最后将两个结果进行按位或操作;
n < 0:左移。使用<<运算符将value左移n位,并使用>> 运算符将value右移bits-n位,最后将两个结果进行按位或操作。
参考代码:
#include <stdio.h> #include <math.h> unsigned int move(unsigned int value, int n) { const int bits = 32; //32位整数 if(n >= 0 && abs(n) <= 30){ //确保n的绝对值不超过30 value = (value >> n) | (value << (bits - n)); } else if(n < 0 && abs(n) < 30){ n *= -1; //n为负数时,需要将它转化为整数,以便下一步位移 value = (value << n) | (value >> (bits - n)); } return value; } int main() { unsigned int value; int n; scanf("%u %d", &value, &n); printf("%u\n", move(value, n)); return 0; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复