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

Bit-field: Understanding how the following program works

能否请你解释一下这个案例:

    struct REGISTRU
{
    int bit3:4;

};


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

为什么结果是-3?

我创建了一个结构,其中包含一个名为 bit3 的字段,类型为 4 位长度的整数(您可以存储 0 到 15 之间的值)。

struct REGISTRU
{
    int bit3:4;

};

然后创建一个名为 bit 的 REGISTRU 类型的变量并将值初始化为 13。

struct REGISTRU bit={13};

最后打印出值

printf("\n%d", bit.bit3);

我们在使用位域时需要非常小心。 当您将变量声明为仅 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);
}