找到寄存器位置越来越高的掩码值

时间:2017-06-12 11:43:06

标签: 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 是较低位置位,即。 我期待掩码值应为0xFFFFFFFF。但是掩码= 0。任何人都可以建议掩码有什么问题吗?

我使用的是32位系统。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

它显示未定义的行为,因为你在32位之外移位到范围之外。