#include <stdio.h>
int main() {
unsigned char reg = 0x35; // 寄存器当前值
unsigned char mask = (1 << 2) | (1 << 5); // 掩码,第2位和第5位置1
reg |= mask; // 使用按位或运算设置指定的位
printf("设置后的寄存器值: 0x%02x\n", reg);
return 0;
}
位运算原理解释:
1 << 2
:这是左移运算符。1
的二进制是00000001
,左移2位后变为00000100
,即十进制的4。这个操作将1移动到了第2位的位置。
1 << 5
:同样是左移运算符。1
左移5位后变为00100000
,即十进制的32。这个操作将1移动到了第5位的位置。
(1 << 2) | (1 << 5)
:这是按位或运算。将上面两个结果进行按位或,00000100
与 00100000
按位或后得到 00100100
,这就是掩码mask
。掩码中对应要设置的位为1,其他位为0。
reg |= mask
:这是复合赋值运算符,等价于reg = reg | mask
。按位或运算会将reg
中与mask
中值为1的位对应的位置1,其他位保持不变。所以最终reg
的值就实现了将第2位和第5位置1,其他位不变。