我希望替换掉32/64位数据字段中的一些比特位(多个),而不影响其他比特位。举个例子:
我有一个64位寄存器,其中第5位和第6位可以取值为0、1、2和3。
5:6
---
0 0
0 1
1 0
1 1
现在,当我读取寄存器时,我得到的值是0x146(0001 0 10 0 0110)。现在我想将位于第5和6位的值更改为01。(现在它是10,即十进制数2,我想将其替换为1 e 01),而不会影响其他位,并将只修改了第5和6位的寄存器写回(所以在更改后变成126)。
我尝试过以下方法:
reg_data = 0x146
reg_data |= 1 << shift // In this case, 'shift' is 5
如果我这样做,位于5和6位置的值将变为11(0x3),而不是我想要的01(0x1)。
- 如何进行读取、修改和写入操作?
- 如何在不影响字段整体数据的情况下,仅替换32/64位字段中特定的位?使用C语言怎么做?
设置一位是可以的,但是多位,我发现有点困难。