32位寄存器,即status_reg具有1个字段(field_1< 0:31>)。要设置和清除此寄存器,我试图获取该寄存器的掩码值。所以一般来说,获得掩码值的公式是:
mask = ((~(~0 << (hbit-lbit+1))) << lbit)
在此 hbit 中位置位数较高,即31.而 lbit 是较低位置位,即。 我期待掩码值应为0xFFFFFFFF。但是掩码= 0。任何人都可以建议掩码有什么问题吗?
我使用的是32位系统。
答案 0 :(得分:1)
我认为你的代码没有给你正确的掩码。如果您喜欢掩码,即位6..10,您可以使用(1<<(hbit-lbit+2))-1)<<lbit
答案 1 :(得分:0)
它显示未定义的行为,因为你在32位之外移位到范围之外。