C ++如何更改32位数字中的4位值

问题描述 投票:1回答:2

我有一个需要操作的32位寄存器。但是我只需要更改第12-15位,其余的保持不变。

Register image

我想用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位中的任何内容。 ...

c++ mask
2个回答
2
投票

首先,将原始位屏蔽掉以确保它们被清零并且不会干扰该值,您将在此处“或”:


0
投票

通常x = (x & ~mask) | (y & mask)mask位置的位从y复制到x

© www.soinside.com 2019 - 2024. All rights reserved.