【发布时间】:2017-03-01 09:02:35
【问题描述】:
我创建了一个字段大小为 1 位的位字段,并使用 int 而不是 unsigned。后来当我尝试检查该字段的值时,我发现该值为-1。
我使用此代码检查二进制表示和我的位字段的值:
#include <stdio.h>
#include <stdlib.h>
union {
struct {
int bit:1;
} field;
int rep;
} n;
int main() {
int c, k;
n.field.bit=1;
for (c = 31; c >= 0; c--)
{
k = n.rep >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf("\n %d \n", n.field.bit);
return 0;
}
输出是: 000000000000000000000000000000001
-1
在那种情况下,为什么我的位字段的值是-1,当我使用有符号整数而不是无符号时它总是一个负数?
【问题讨论】:
标签: c bit-fields