位字段:了解以下程序的工作原理

时间:2015-06-04 08:07:16

标签: c bit-fields

请你解释一下这个案子:

    struct REGISTRU
{
    int bit3:4;

};


struct REGISTRU bit={13};
printf("\n%d", bit.bit3);

为什么结果是-3?

2 个答案:

答案 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);