我有一个需要操作的32位寄存器。但是我只需要更改第12-15位,其余的保持不变。
我想用0x2或0b0010覆盖12-15位中的任何内容。
如何在C ++中做到这一点?
这是我一直在尝试的示例代码。
#include <iostream>
#include <bitset>
using namespace std;
int main() {
uint32_t x = 0x4D00D0F0;
x |= 0x2 << 12; // shifting 0x2 12 bits to the left
return 0;
}
我的解决方案似乎只将1移至第13位,为什么??>
我可以移位整个4位十六进制数字吗?
底线,我希望x = 0x4D0020F0
我有一个需要操作的32位寄存器。但是我只需要更改12-15位,而其余的位保持不变。我想用0x2或0b0010覆盖12-15位中的任何内容。 ...
首先,将原始位屏蔽掉以确保它们被清零并且不会干扰该值,您将在此处“或”:
通常x = (x & ~mask) | (y & mask)
将mask
位置的位从y
复制到x
。