c中的struct缺省值

wah*_*dul 1 c struct bit-fields

我在使用结构的C中遇到了这个问题.我不确定这里到底发生了什么.谢谢

#include<stdio.h>
int main()
{
 struct num1
 {
  int n1:2;
  int n2:3;
  int n3:4;
 };
 struct  num1 num={3,4,5};
 printf("%d %d %d\n",num.n1,num.n2,num.n3); 
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

获得的输出是

-1 -4 5

Bar*_*mar 6

这些是位字段,后面的数字:指定该成员中有多少位.

int n1:2
Run Code Online (Sandbox Code Playgroud)

表示带有2位的有符号整数.在二进制补码,这使得从价值观-21; 符号+级符号它允许-11.当您尝试分配3给此成员时,会出现溢出,从而导致未定义的行为.

同样

int n2:3
Run Code Online (Sandbox Code Playgroud)

是指具有3个比特的signied整数,其范围是-4,以3在二的补码,-33在符号+大小,所以分配4原因溢出.

int n3:4
Run Code Online (Sandbox Code Playgroud)

具有介于-87-77,所以分配5适合它,所以没有溢出.