假设我想在给定某个寄存器值的情况下切换位0 - 3,该如何操作?
例如:
unsigned char regVal = 0xB5; //1011 0101
// Toggle bits 0-3 (0101) to 1 without changing 4-7 where result should be 1011 1111
unsigned char result = regVal & (0x01 | 0x02 | 0x03 | 0x04);
或
unsigned char regVal = 0x6D; //0110 1101
// Toggle bits 4 and 7 to 1 without changing 1,2,3,5,6 where result should be 1111 1101
unsigned char result = regVal & (0x10 | 0x80);
我试图掩盖上面的方式是错误的,我不知道使用什么操作符来实现这一点。
2条答案
按热度按时间kknvjkwl1#
要将特定位设置(为1):
要将特定位复位(至0):
要写入值(可以是0或1),您需要先将其归零,然后设置
一个一个二个一个一个一个三个一个一个一个一个一个一个四个一个一个一个一个一个五个一个
xbp102n02#
只需使用逐位XOR。
regval ^= 0xFu;
或者如果您愿意regval ^= MASK;
就是这样。