C++程序 旋转数字的位数

C++程序 旋转数字的位数

位旋转:旋转(或循环移位)是一种类似于移位的操作,但掉落的位在一端重新放回另一端。

在左旋转中,落在左端的位转到右端。

在右旋转中,落在右端的位转到左端。

例子:

假设 n 存储了 8 位。向左旋转3个单位 n = 11100101,得到 n = 00101111(左移3个单位并把前3个放回最后)。如果 n 存储了16位或32位,则 n 的左旋转(000…11100101)变成00..00 11100101 000。

向右旋转3个单位 n = 11100101,得到 n = 10111100(右移3个单位并把后3个放回最前),如果 n 存储了8位,则 n 的左旋转(000…11100101)变成 101 000..00 11100

// C++代码,旋转数字的位数
#include <bits/stdc++.h>
using namespace std;
#define INT_BITS 32 //定义整数最大位数
 
class gfg {
 
    /*函数,向左旋转 n 的 d 位*/
public:
    int leftRotate(int n, unsigned int d)
    {
 
        /* 在 n<<d 中,最后d位是0,为了把n的第3位放到最后,
         需要将 n<<d 与 n >>(INT_BITS - d) 按位或运算 */
        return (n << d) | (n >> (INT_BITS - d));
    }
 
    /*函数,向右旋转 n 的 d 位*/
    int rightRotate(int n, unsigned int d)
    {
        /* 在 n>>d 中,前 d 位为 0。为了把 n 的最后3位放到最前,
        需要将 n >>d 与 n <<(INT_BITS - d) 按位或运算 */
        return (n >> d) | (n << (INT_BITS - d));
    }
};
 
/* 主函数 */
int main()
{
    gfg g;
    int n = 16;
    int d = 2;
    cout << "Left Rotation of " << n << " by " << d
         << " is ";
    cout << g.leftRotate(n, d);
    cout << "\nRight Rotation of " << n << " by " << d
         << " is ";
    cout << g.rightRotate(n, d);
 
}
// 代码作者:SoM15242```  

输出

Left Rotation of 16 by 2 is 64
Right Rotation of 16 by 2 is 4

时间复杂度: O(1)

辅助空间: O(1)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例