私はCでの初心者ですと、コードのこの部分が働いているか理解することはできません。このC構造体がどのように値を出力しますか?
struct marks{
int p:3;
int c:3;
int m:2;
};
void main(){
struct marks s={2,-6,5};
printf("%d %d %d", s.p, s.c, s.m);
}
Iが出力されていることがわかった:2 2 1
しかし、試してみるの多くの後、私は数字にできませんでしたアウトプットがどのようにそのようなものになっているか私は構造体に関する知識が少ない。だから私はここで何か問題を感じているかもしれない。
[Cでビットフィールドを使用するタイミング](https://stackoverflow.com/questions/24933242/when-to-use-bit-fields-in-c) – Gaurav
int 'c' 'p 'は3ビットしか持たない。 3ビットでは、0から7までの0から7、0から3、そして(符号付き) 'int'を使用して-1から-4の8つの値しか使用できません。変数に3つの下位ビットしかセットされていなければ、3ビットの 'int'に-6を挿入することはできません。 –
あなたは何を期待しましたか?あなたはなぜ、水でいっぱいの2つのバケツを1つのバケツに入れることができると思いますか?これはビットフィールドに関連するものではなく、単に小さすぎる整数型を使用するだけです。コンパイラを有効にしましたか?何故なの?はいの場合:コンパイラーは警告しませんでしたか?なぜあなたはそれらを無視しましたか?あなたのコードは実装定義の変換に依存しています。 – Olaf