C++ 旋转数字的位

2024 年 8 月 29 日 | 4 分钟阅读

在本文中,您将学习如何在 C++ 中旋转数字的位。

当数字的位被旋转时,数字的二进制表示会向左或向右移动预定的位数。此过程在许多位操作任务中都很有用。在 C++ 中,旋转有两种基本形式:左旋转右旋转。这两种旋转是位旋转理论的基础。

1. 位运算符

按位左移 (<<): 此运算符将数字的位向左移动预定数量。该数字有效地乘以 2 的移位量次方。

按位右移 (>>): 此运算符将位向右移动预定数量。该数字有效地除以 2 的移位量次方。无符号数字的最左侧位置用零填充。

2. 左旋转:所有位向左旋转一定数量的位置,任何从左端掉落的位都会缠绕到右端。它可以通过将按位或操作与左移结合来完成。

3. 右旋转:它涉及将从右端掉落的位缠绕回左端,并将所有位向右移动一定数量的位置。按位或和适当的移位可以用来完成此操作。

4. 数据类型和大小处理:旋转位时,请考虑数据类型的大小。如果位移位超出数据类型的大小,可能会出现不可预测的行为。为了防止出现问题,您应该在此大小范围内旋转位,因为 C++ 中的整数通常占用 4 字节(32 位)8 字节(64 位),具体取决于系统。

在 C++ 中使用位操作时,考虑数据类型的大小以及溢出或下溢的可能性至关重要。在嵌入式系统、系统编程以及需要对数据表示进行低级控制的其他场景中,位操作经常被使用。

C++ 中数字的位可以通过使用按位操作(例如左移 (<<) 和右移 (>>))来更改。移位的位使用按位或 (|) 运算符组合以产生旋转效果。

示例

输出

Original number: 64
Left rotate by 4 bits: 1024
Right rotate by 4 bits: 4

说明

  1. 在此示例中,输入/输出活动需要包含头文件 "iostream"
  2. 定义了两个函数分别用于处理左位旋转和右位旋转:Left_RotateRight_Rotate。这些函数接受两个参数:要旋转的数字和旋转的位数。
  3. 借助左移运算符,Left_Rotate 函数将数字 num 的位向左旋转 d 位。由于后续的按位或 (|) 操作,num 的位向右移动 sizeof(num) * 8 - d 位。通过此操作,左移到右侧的位确保它们被带回右端。
  4. 使用右移运算符 >>,Right_Rotate 函数将数字 num 的位向右旋转 d 位。之后,由于按位或 (|) 操作,num 的位向左移动 sizeof(num) * 8 - d 位。由于此操作,被推到右侧的位被返回到左端。
  5. 在 main 函数中定义了一个示例数字 num_ber(最初设置为 64)和要旋转的位数 Rotate_By(最初设置为 4)。
  6. 打印原始数字。
  7. 报告将位向左旋转 Rotate_By 位和向右旋转 Rotate_By 位的结果。