C言語でビットフィールドを定義する方法は?

C言語のビットフィールド構造体では、ビット単位でメンバーの領域を指定できる特殊なデータ構造です。

ビットフィールド関数を定義するための例を以下に示します。

#include <stdio.h>

struct {
   unsigned int b0:1;
   unsigned int b1:1;
   unsigned int b2:1;
   unsigned int b3:1;
} bits;

int bit(int n) {
   switch(n) {
      case 0:
         return bits.b0;
      case 1:
         return bits.b1;
      case 2:
         return bits.b2;
      case 3:
         return bits.b3;
      default:
         return -1; // 错误,超出范围
   }
}

int main() {
   bits.b0 = 1;
   bits.b1 = 0;
   bits.b2 = 1;
   bits.b3 = 0;

   printf("bit(0): %d\n", bit(0));
   printf("bit(1): %d\n", bit(1));
   printf("bit(2): %d\n", bit(2));
   printf("bit(3): %d\n", bit(3));
   printf("bit(4): %d\n", bit(4));

   return 0;
}

この例では、4 つのビットフィールドを含む未命名構造体 bits を使用しています。各ビットフィールドは 1 ビットのみを占め、2 進数のビット値を表しています。

引数nを受け取るbit()関数は、nのビットフィールドの値を返します。nが範囲外であると(例えば3より大きい場合)、関数はエラーを表す-1を返します。

main()関数ではビット構造体の4つのビットフィールドの値を設定し、bit()関数を使用して各ビットフィールドの値を出力しました。

翻訳結果:

bit(0): 1
bit(1): 0
bit(2): 1
bit(3): 0
bit(4): -1

ビットフィールドの使用には制限があり、ビットフィールドの大きさや順番には規則があるので、C言語の標準を参照してください。

bannerAds