请你解释一下这个案子:
struct REGISTRU
{
int bit3:4;
};
struct REGISTRU bit={13};
printf("\n%d", bit.bit3);
为什么结果是-3?
答案 0 :(得分:1)
使用位字段时我们需要非常小心。 当您将变量声明为仅 int 时,在C中它默认为 signed int 。
如果您看到二进制值为13,则为1101.因此MSB
被视为符号值,因此您获得-3。如果您希望它在代码下方使用值13:
struct REGISTRU
{
unsigned int bit3:4;
};
void main()
{
struct REGISTRU bit={13};
printf("\n%d", bit.bit3);
}
答案 1 :(得分:0)
我使用一个名为bit3的字段创建一个结构,该字段的长度为4位整数(您可以存储0到15之间的值)。
struct REGISTRU
{
int bit3:4;
};
然后创建一个名为REGISTRU类型的变量,并将该值初始化为13。
struct REGISTRU bit={13};
最后打印出值
printf("\n%d", bit.bit3);