c - C 为特定数字设置 3 位
问题描述
我试图理解屏蔽概念,并想在 C 中设置 uint32_t 数字的第 24、25、26 位。
我有的例子
uint32_t 数据 =0;
我正在接受 uint_8 用户的输入,它只能是值 3 和 4 (011,100)
我想在数据变量的第 24、25、26 位中设置值 011 或 110,而不会干扰其他位。
谢谢。
解决方案
要设置整数的第 24、25 和 26 位而不修改其他位,可以使用以下模式:
data = (data & ~((uint32_t)7 << 24)) | ((uint32_t)(newBitValues & 7) << 24);
第一个&
操作清除这三位。然后我们使用另一个&
操作来确保我们有一个介于 0 和 7 之间的数字。然后我们将它向左移动 24 位并使用|
将这些位放入最终结果中。
我有一些uint32_t
强制转换只是为了确保此代码在int
少于 32 位的系统上正常工作,但除非您正在编写嵌入式系统,否则您可能不需要这些。
推荐阅读
- reactjs - “事件”不可分配给“WheelEvent”类型的参数
' - kubernetes - kubernetes集群部署yaml的路径
- javascript - 一段时间后,Android WebView JavaScript-Bridge 变得无法使用
- html - Github pull request 删除了其他文件
- node.js - 如何从 IPFS 读取数据
- python - 将 nmServerStatus() 结果存储在 python 中的变量中
- temporal-workflow - 如何使用 Go 在 Temporal 中测试超时?
- visual-studio - Visual Studio 2019 中的彩色编号圆圈
- android - 如何在运行程序时更改小部件动画
- c# - 无法与 Http2And3 一起启动 Kestrel