-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ます.2ビット幅しか-5ありませんが、を保存しようとしています.2ビットでエンコードするのは簡単ではありません.

于 2012-09-27T07:46:37.923 に答える
0

ステートメントS.b = -5S.c = 100はオーバーフローを引き起こします(2ビットまたは3ビットで保持できない値を割り当てているため)。したがって、SbとScには期待する値が含まれません。

于 2012-09-27T07:55:50.933 に答える