为什么要为此代码打印 -1,当位域设置为 1 时,我认为它是 1?

Why printing -1 for this code, I supposed it to be 1 when bit-field is set to 1?

#include<stdio.h>  
int main()  
{  
    struct byte  
    {  
        int one:1;  
    };

    struct byte var = {1};  // statement A
    printf("%d", var.one);  
    return 0;  
}  

在这里,我想我们已经将整数变量 'one' 的位内存限制为 1,即;它只能存储 0 和 1,在 'statement A' 处我们已经用 '1' 初始化了这个变量,这应该没问题,因为 'one' 仍然可以在它的内存中保留一点,但它正在打印 -1安慰 !有帮助吗?

实现定义的一个用int类型定义的位字段是否等价于signed intunsigned int。 (这仅适用于位字段;否则 intsigned int 完全相同。)

如果 int one:1; 是有符号的(就像在您的实现中一样),那么那个位就是符号位,唯一可能的值是 0-1 .由于超出范围,您用于初始化它的值 1 隐式 转换-1。 (实际上转换的结果是实现定义的。)

将声明更改为:

unsigned int one:1;

它可以有值 01。位字段通常应该显式未签名,除非您确实需要对它们进行签名——在这种情况下,您应该使用 signed int 而不是 int.