为什么C中的以下代码打印-1?

Raj*_*thi 1 c structure bit-fields

我期待1作为输出..

#include<stdio.h>
int main(){
struct A{
    int a:1;
};
struct A bb;
bb.a=1;
printf("%d",bb.a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

Arj*_*ran 9

通过这样做int a:1,你设置a1 bit signed int.它由1位表示,并假设在您的实现中有两个补码表示,它有一个范围{0,-1}.因此设置1a将表示值-1.

附录:

请注意,按C90标准,平原int是一个signed int; 但是当谈到位字段时,以下情况属实:

位字段可以具有int,unsigned int或signed int类型.普通int比特字段的高阶比特位置是否被视为符号比特是实现定义的