7
#include<stdio.h>

int main()
{
    struct value{
       int bit1 : 1;
       int bit3 : 4;
       int bit4 : 4;
       }bit={1,2,2};
     printf("%d %d %d\n",bit.bit1,bit.bit3,bit.bit4);
     return 0;
}

出力:

-1 2 2

プログラムの出力について説明してください。

4

3 に答える 3

9

bit1-1値のみを保持できる符号付き 1 ビット整数0です。

于 2012-04-10T19:01:33.097 に答える
8

おそらく唯一の興味深い出力は最初のものです。

1 ビットの2 の補数の整数が表現できる値の範囲を考えてみましょう。

于 2012-04-10T19:01:12.080 に答える
2

構造体内の以下のステートメントに注意してください。

int bit1:1; ->'int'は、それがSIGNED整数であることを示します。符号付き整数の場合、左端のビットが+/-符号になります。1ビットフィールドに1を格納する場合:左端のビットは1であるため、システムは値を負の数として扱います。

2の補数法は、負の値を処理するためにシステムによって使用されます。

したがって、格納されるデータは1です。1の2の補数も1(負)です。

したがって、-1が出力されます。

2を4ビットフィールドに格納する場合:バイナリ2:0010(左端のビットは0であるため、システムはそれを正の値として扱います)0010は2です。したがって、2が出力されます。

于 2012-10-03T10:04:39.947 に答える