-3

考虑以下代码

#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();
}
4

2 回答 2

2

您正在定义一个 1 位有符号数a。这没有多大意义,因为一旦符号被编码,就没有任何位可用于任何东西。小位域通常应该是一种unsigned类型,并且宽度字段1必须是,然后您可以存储 0 或 1,这可能就是您的意思。

成员也发生了同样的问题b,它只有两位宽,但您正在尝试存储-5,它实际上并不能很容易地编码为两位。

于 2012-09-27T07:46:37.923 回答
0

语句S.b = -5S.c = 100导致溢出(因为您分配的值不能保存在 2 位或 3 位中),因此 Sb 和 Sc 不会包含您期望的值。

于 2012-09-27T07:55:50.933 回答