0

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

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

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

我使用的是 32 位系统。

4

2 回答 2

1

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

于 2017-06-12T12:15:26.067 回答
0

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

于 2017-06-12T11:52:47.190 回答