读取时的位域元素在 C 中给出不同的值

Bitfield element when read giving a different value in C

我尝试写入位域并读回时的小片段给出了不同的值

#include <stdio.h>
typedef struct
{
  int a:1;
  int b:1;
  int c:1;
  int d:5;
}node_t;

int main()
{
  node_t var;
  var.a = 1;
  var.b = 0;
  int a = var.a;
  int b = var.b;
  printf(" %d", a);
  printf(" %d", b);
 return 0;
}

这给出了输出:

 -1 0

我的位域 var.a 如何变成 -1 而不是 1?

您应该知道 int 是默认签名的。因此,当您为整数值设置一位时,您将该变量的符号位设置为 1。因此它将是一个负值。为此,这将是二进制补码技术。