#include<stdio.h>
int main(void)
{
struct str
{
int i: 1;
int j: 2;
int k: 3;
int l: 4;
};
struct str s;
s.i = 1;
s.j = 2;
s.k = 5;
s.l = 10;
printf(" i: %d \n j: %d \n k: %d \n l: %d \n", s.i, s.j, s.k, s.l);
getchar();
return 0;
}
出力:誰かが私に説明して、なぜ次のような結果を得られるのでしょうか?ウェブサイトで与えられた
i: 1
j: 2
k: 5
l: 10
私はビットフィールドであるかを理解していない
i :-1
j : -2
k : -3
l : -6
を得ました。誰かがここでこのコードで何が起こっているか教えてくれますか?
ビットフィールドの内容を調べるには、本またはGoogleを読むか、このサイトを検索してください。ビットフィールドの動作のほとんどが標準化されていないため、結果は例とは異なります。したがって、あなたのコードを異なるコンパイラまたは将来のコンパイラで動作させたい場合は、ビットフィールドを避けることをお勧めします。 –
* "Output Given with the Website" * - どのWebサイトですか? – StoryTeller
'int i:1'はゼロになります。 signed-intビットフィールドは符号のビットを予約し、1ビットしか提供していないので、符号付き整数のビットフィールドが残っています。このビットフィールドは、負または正の値を持ちますが、償還可能な大きさの値はありません値のためのビットが残っていない)。このコードの残りの部分は、提供されたビット(符号ビットより少ない)で可能な最大値に違反することを実践しているようです。 – WhozCraig