我在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
答案 0 :(得分:6)
这些是位字段,:
之后的数字指定该成员中的位数。
int n1:2
表示带2位的有符号整数。在二进制补码表示法中,这允许从-2
到1
的值;在符号+幅度表示法中,它允许-1
到1
。当您尝试将3
分配给此成员时,会出现溢出,从而导致未定义的行为。
类似地
int n2:3
表示带有3位的有符号整数,其范围为-4
到3
的二进制补码,-3
到3
符号+幅度,因此赋值{{1导致溢出。
4
的范围从int n3:4
到-8
或7
到-7
,因此分配5适合它,因此没有溢出。