【C/C++】循环移位

题目描述:

编写一个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,表示程序成功结束
}
相关推荐
液态不合群几秒前
查找算法详解
java·数据结构·算法
代码游侠2 分钟前
学习笔记——Linux进程间通信(IPC)
linux·运维·笔记·学习·算法
高洁012 分钟前
DNN案例一步步构建深层神经网络(3)
python·深度学习·算法·机器学习·transformer
_dindong6 分钟前
笔试强训:Week -8
开发语言·c++·算法
LYFlied21 分钟前
【每日算法】LeetCode 105. 从前序与中序遍历序列构造二叉树
数据结构·算法·leetcode·面试·职场和发展
重生之我是Java开发战士23 分钟前
【数据结构】Java对象的比较
java·jvm·数据结构
DanyHope27 分钟前
LeetCode 206. 反转链表:迭代 + 递归双解法全解析
算法·leetcode·链表·递归·迭代
NAGNIP30 分钟前
才发现TensorBoard是个可视化的神器!
算法
历程里程碑36 分钟前
C++ 16:C++11新特化
c语言·开发语言·数据结构·c++·经验分享
_dindong36 分钟前
算法杂谈:回溯路线
数据结构·算法·动态规划·bfs·宽度优先