解题思路:
在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 人评分