首页 > 解决方案 > C 为特定数字设置 3 位

问题描述

我试图理解屏蔽概念,并想在 C 中设置 uint32_t 数字的第 24、25、26 位。

我有的例子

uint32_t 数据 =0;

我正在接受 uint_8 用户的输入,它只能是值 3 和 4 (011,100)

我想在数据变量的第 24、25、26 位中设置值 011 或 110,而不会干扰其他位。

谢谢。

标签: cbitbitmask

解决方案


要设置整数的第 24、25 和 26 位而不修改其他位,可以使用以下模式:

data = (data & ~((uint32_t)7 << 24)) | ((uint32_t)(newBitValues & 7) << 24);

第一个&操作清除这三位。然后我们使用另一个&操作来确保我们有一个介于 0 和 7 之间的数字。然后我们将它向左移动 24 位并使用|将这些位放入最终结果中。

我有一些uint32_t强制转换只是为了确保此代码在int少于 32 位的系统上正常工作,但除非您正在编写嵌入式系统,否则您可能不需要这些。


推荐阅读