c中的struct缺省值

时间:2017-03-30 20:30:32

标签: 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;
}

获得的输出是

  

-1 -4 5

1 个答案:

答案 0 :(得分:6)

这些是位字段,:之后的数字指定该成员中的位数。

int n1:2

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

类似地

int n2:3

表示带有3位的有符号整数,其范围为-43的二进制补码,-33符号+幅度,因此赋值{{1导致溢出。

4

的范围从int n3:4 -87-7,因此分配5适合它,因此没有溢出。