如何在 C++ 中设置、清除和切换单个位?

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

位运算符主要用于低级编程。位运算符允许我们设置、检查、清除或切换整数类型中的位。在嵌入式系统中,位运算符对端口或寄存器中的单个位执行位操作。在本文中,我们将讨论如何在 C++ 中设置、清除和切换单个位。

1. 设置位

设置第 N 位意味着如果它是 0,则将其设置为 1;如果它是 1,则它保持不变。在 C++ 中,按位或运算符 (|) 用于指定整数数据类型的位。正如我们所知,"|"(按位或运算符)计算一个新的整数值,其中每个位位置为 1 仅当操作数(整数类型)在该位置具有 1 时。

示例

让我们用一个 C++ 程序来实现位的设置。

输出

Setting up the third bit in the given number: 18
The resultant value = 26

说明

在此示例中,程序定义了一个名为 setting_bit 的特性,它接受参数:number(输入值)和 pos(要设置的位的位置)。在主函数中,一个实例范围 18 被初始化并保存在变量 number 中。之后,程序调用 setting_bit 方法并将 number 和位置作为参数传递。在 setting_bit 函数内部,按位或运算符(在广泛的范围内)。

表达式 (1 << pos) 计算一个值,其中第 N 位在位置 pos 处设置为 1,所有其他位设置为 0。与原始数字的按位或操作将范围中对应的位设置为 1(如果它最初是 0)。否则,它保持不变。结果函数用于使用 cout 语句显示在位置处设置的数字。

2. 清除位

清除位意味着将其设置为 0(当它为 1 时),而不触及或影响其他位。此任务通过使用按位与和非运算符(按位非)来完成。按位非反转所有位,从 1 到 0,从 0 到 1。此按位非属性对于清除已设置的位很有用。

示例

让我们用一个 C++ 程序来实现位的清除。

输出

Clearing up the third bit in the given number: 18
The resultant value = 26

说明

在此示例中,程序定义了一个名为 clearing_bit 的函数,它接受参数:number(输入范围)和 pos(要清除的位的位置)。在 clearing_bit 方法内部,范围中位置 pos 处的位通过与位掩码进行按位与操作来清除。

位掩码是通过在将 1 左移 pos 个位置的结果上使用按位 非运算符 (~) 来创建的。它将位置 pos 处的位设置为 0,并保持所有其他位不变。结果数字从 clearing_bit 函数返回。在主函数中,一个实例范围 12 被初始化并存储在变量 number 中。clearing_bit 函数以 number 和位置 3 作为参数调用,并返回 8 作为输出。

3. 切换位

当一个位被切换时,该位处于其补码状态。如果该位当前已设置,则将其更改为未设置,反之亦然。我们可以使用按位 XOR ^ 运算符 来更改位。如果两个操作数的相应位不同,则按位 XOR 运算符更改为 1;如果它们相同,则更改为 0。

示例

让我们用一个程序来实现 C++ 中位的切换。

输出

Toggling up the third bit in the given number: 16
The resultant value = 24

说明

在此示例中,程序使用一个名为 toggling_bit 的函数,它接受参数:quantity(输入范围)和 pos(要切换的位的位置)。在 toggling_bit 方法内部,数字中函数 pos 处的位通过与位掩码进行按位 XOR 操作 (^) 来切换。位掩码是通过将 1 左移 pos 个位置来创建的。

它创建一个值,其中函数 pos 处的简单位设置为 1,所有其他位设置为 0。按位 XOR 操作切换函数 pos 处的位,如果它最初是 1,则将其更改为 0,如果它最初是 0,则将其更改为 1。结果值从 toggling_bit 函数返回。在上述示例方法中,输入数字 16 被初始化并保存在变量 variety 中,并返回输出 24。