9

重複の可能性:
「unsignedtemp:3」とはどういう意味ですか

  struct Test
  {
      unsigned a : 5;
      unsigned b : 2;
      unsigned c : 1;
      unsigned d : 5;
  };

  Test B;
  printf("%u %u %u %u", B.a, B.b, B.c, B.d); // output: 0 0 0 0
  static struct   Test A = { 1, 2, 3, 4};

誰かが:構造体の目的を説明してもらえますか?printf出力だけ0なので、これらはデフォルト値ではないと思いますが、それではどうなりますか?

また、誰かが私になぜ代わりにA.a, A.b, A.c, A.d出力するのか説明してもらえますか1, 2, 1, 41, 2, 3, 4

4

3 に答える 3

19

それはビットフィールドです。

それは基本的にコンパイラに次のように伝えhey, this variable only needs to be x bits wide, so pack the rest of the fields in accordingly, OKますか?

于 2012-06-25T21:58:10.473 に答える
2

これらはビットフィールドです。ビットフィールドに関するこのWikipeadiaセクション、またはビットフィールドに関するこのリファレンスを参照してください。

の後の数字:は、左側の識別子用に予約するビット数を示しています。これにより、データを密にパックすることで通常よりも少ないスペースを割り当てることができます。structこれはsまたはsでのみ実行できますunion

これはビットフィールドに関する短いチュートリアルです。

于 2012-06-25T21:58:10.283 に答える
0

簡単な説明:変数のビット数を指定します。(タイプの元のサイズより多くのビットを指定することはできません。)
編集:1 bit 3番目の変数は、データを格納するだけでよいため、1のみを出力します。0したがって、値はまたはのみになります1。10進値は、バイナリ形式で3表されます。11したがって、どのビットが切り捨てられても1、変数に格納されることになります。

于 2012-06-25T21:58:52.537 に答える