c - 查找寄存器较高位置和较低位置的掩码值

标签 c bit-manipulation c-preprocessor bitmask bit-masks

32 位寄存器,即 status_reg 有 1 个字段 (field_1 <0:31>)。为了设置和清除该寄存器,我试图获取该寄存器的掩码值。所以一般来说,获取掩码值的公式是:

mask = ((~(~0 << (hbit-lbit+1))) << lbit)

在此hbit是较高位置位,即31。而lbit是较低位置位,即0。 我期望掩码值应该是 0xFFFFFFFF。但是得到 mask= 0。任何人都可以建议 mask 有什么问题吗?

我使用的是32位系统。

最佳答案

我认为您的代码没有给您正确的掩码。如果您喜欢位 6..10 的掩码,您可以使用 (1<<(hbit-lbit+2))-1)<<lbit

关于c - 查找寄存器较高位置和较低位置的掩码值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44498591/

相关文章:

c++ - 为什么使用预处理器 #if 语句而不是 if() else?

c - lstat : can't access files in another directory

c - 在 PintOS 中运行 make 时获取对 `floor' 的 undefined reference

c++ - 连接 4 位整数

sql-server - 重写T-SQL按位逻辑

c - 位操作 : modify the 32 bit integer to include the substring

C 预处理器宏扩展

c++ - 比较运算符的行为是什么?

c++ - 正确使用strtol

c++ - 创建一个只有模板头文件的项目库文件