题目描述:
编写一个C++程序,接受两个整数输入 i 和 j,如果 j 的值大于 0,则将 i 循环左移 j 位;如果 j 的值小于 0,则将 i 循环右移 j 位。最后输出 i 的值。
输入格式:
两个整数 i 和 j,以空格分隔。
输出格式:
输出 i 的值。
例如:
输入:3 10
输出:3072
输入:-65535 -2
输出:2147467264
cpp
#include <iostream> // 包含输入输出流库
unsigned int rotateLeft(unsigned int i, int j) { // 左移函数,接受一个无符号整数和一个整数作为参数
return (i << j) | (i >> (32 - j)); // 返回i左移j位后的结果,或上i右移(32-j)位的结果
}
unsigned int rotateRight(unsigned int i, int j) { // 右移函数,接受一个无符号整数和一个整数作为参数
return (i >> j) | (i << (32 - j)); // 返回i右移j位后的结果,或上i左移(32-j)位的结果
}
int main() { // 主函数
unsigned int i; // 定义无符号整数i
int j; // 定义整数j
std::cin >> i >> j; // 从标准输入流中读取两个整数,分别存储到i和j中
if (j > 0) { // 如果j大于0
i = rotateLeft(i, j); // 调用左移函数将i左移j位
} else if (j < 0) { // 如果j小于0
j = -j; // 将j取负值
i = rotateRight(i, j); // 调用右移函数将i右移j位
}
std::cout << i << std::endl; // 输出结果i到标准输出流中,并换行
return 0; // 返回0,表示程序成功结束
}