读取时的位域元素在 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
。因此它将是一个负值。为此,这将是二进制补码技术。
我尝试写入位域并读回时的小片段给出了不同的值
#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
。因此它将是一个负值。为此,这将是二进制补码技术。