【发布时间】:2011-05-08 05:17:18
【问题描述】:
我想在不影响其他位的情况下替换 32/64 位数据字段中的位/位(大于 1)。例如:
我有一个 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 (shift in this case is 5)
如果我在位 5 和 6 处执行此值,将变为 11(0x3) 而不是我想要的 01(0x1)。
- 如何进行读取/修改/写入?
- 如何使用 C 仅替换 32/64 位字段中的某些位/位而不影响字段的整个数据?
设置一点没问题,但不止一点,我觉得有点困难。
非常感谢任何建议。
【问题讨论】:
标签: c bit-manipulation