gpt4 book ai didi

c++ - C++如何改变32位数字中4位的值

转载 作者:行者123 更新时间:2023-12-01 14:09:56 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How do you set only certain bits of a byte in C without affecting the rest?

(4 个回答)


去年关闭。




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

最佳答案

首先,屏蔽原始位以确保它们被清零并且不会干扰该值,您将在那里“或”:
x & 0xffff0fff
然后“或”新位到位:
(x & 0xffff0fff) | (0x2 << 12)

关于c++ - C++如何改变32位数字中4位的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62079212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com