C语言 如何切换8位寄存器中的某些位?

qmelpv7a  于 2023-01-20  发布在  其他
关注(0)|答案(2)|浏览(136)

假设我想在给定某个寄存器值的情况下切换位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);

我试图掩盖上面的方式是错误的,我不知道使用什么操作符来实现这一点。

kknvjkwl

kknvjkwl1#

要将特定位设置(为1):

regVal |= 1 << bitnum;

要将特定位复位(至0):

regVal &= ~(1 << bitnum);

要写入值(可以是0或1),您需要先将其归零,然后设置
一个一个二个一个一个一个三个一个一个一个一个一个一个四个一个一个一个一个一个五个一个

xbp102n0

xbp102n02#

只需使用逐位XOR。regval ^= 0xFu;或者如果您愿意regval ^= MASK;
就是这样。

相关问题