#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
プログラムの出力について説明してください。
#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
プログラムの出力について説明してください。
bit1
-1
値のみを保持できる符号付き 1 ビット整数0
です。
おそらく唯一の興味深い出力は最初のものです。
1 ビットの2 の補数の整数が表現できる値の範囲を考えてみましょう。
構造体内の以下のステートメントに注意してください。
int bit1:1; ->'int'は、それがSIGNED整数であることを示します。符号付き整数の場合、左端のビットが+/-符号になります。1ビットフィールドに1を格納する場合:左端のビットは1であるため、システムは値を負の数として扱います。
2の補数法は、負の値を処理するためにシステムによって使用されます。
したがって、格納されるデータは1です。1の2の補数も1(負)です。
したがって、-1が出力されます。
2を4ビットフィールドに格納する場合:バイナリ2:0010(左端のビットは0であるため、システムはそれを正の値として扱います)0010は2です。したがって、2が出力されます。