考虑以下代码
#include<stdio.h>
#include<conio.h>
struct mystruct
{
int a:1;
int b:2;
int c:3;
};
void main()
{
struct mystruct S;
clrscr();
S.a=1;
S.b=-5;
S.c=100;
printf("%d %u %d %u %d %u",S.a,S.a,S.b,S.b,S.c,S.c);
getch();
}
答案 0 :(得分:2)
您正在定义1位有符号数a
。这没有多大意义,因为一旦标志被编码,就没有任何东西留给任何东西。小位域通常应为unsigned
类型,宽度为1
的字段必须为,然后您可以存储0或1,这可能就是您的意思。
同样的问题发生在b
成员上,它只有两位宽,但你试图存储-5
,它实际上不会很容易地编码为两位。
答案 1 :(得分:0)
语句S.b = -5
和S.c = 100
会导致溢出(因为您指定的值不能保存在2位或3位),因此Sb和Sc不会包含您期望的值到。