如何在C++中设置、清除和切换单个位?
你好!我正在为微控制器编写C++程序,并处理寄存器。我需要控制单个位:将它们设置为1、清除为0以及切换(取反)。我知道这可以通过位操作实现,但总是搞混语法。
例如,我有一个变量 `uint8_t flags = 0b00001111;`。我想:
1. 将第3位(从0开始计数)设置为1。
2. 将第2位清除为0。
3. 切换第1位(如果为1则变为0,如果为0则变为1)。
目前我是这样做的:
```cpp
uint8_t flags = 0b00001111;
// 设置位3
flags = flags | 0b00001000; // 可行,但不方便
// 清除位2
flags = flags & 0b11111011; // 经常在掩码上出错
// 切换位1
flags = flags ^ 0b00000010; // 似乎可行
```
问题:
- 是否有通用的宏或函数来实现这些操作?
- 如何正确地对位进行编号(从0还是从1开始)?
- 能否避免手动计算掩码?
我在Stack Overflow上读过,但那里的示例是C语言的,而我需要C++的。