【问题标题】:C ++ How to change the value of 4 bits in a 32 bit number [duplicate]C ++如何更改32位数字中4位的值[重复]
【发布时间】:2020-09-16 14:59:49
【问题描述】:

我有一个需要操作的 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

【问题讨论】:

    标签: c++ mask


    【解决方案1】:

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

    x &amp; 0xffff0fff

    然后将新位“或”到位:

    (x &amp; 0xffff0fff) | (0x2 &lt;&lt; 12)

    【讨论】:

      【解决方案2】:

      一般x = (x &amp; ~mask) | (y &amp; mask)mask 位置中的位从y 复制到x

      在 OP 的情况下,mask = 0xF000y = 0x2000

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多