ホームページ  >  記事  >  バックエンド開発  >  C のビットフィールド

C のビットフィールド

WBOY
WBOY転載
2023-09-08 22:57:031361ブラウズ

C のビットフィールド

このセクションでは、C 言語のビットフィールドとは何かを理解します。

C プログラムに、次のように state と呼ばれる構造体にグループ化された多くの TRUE/FALSE 変数が含まれているとします。 -

struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status;

この構造体には 8 ビットのメモリ空間が必要ですが、実際には 0 または各変数に 1。この場合、C プログラミング言語を使用すると、メモリ空間をより効率的に利用できます。

このような変数を構造体で使用する場合は、変数の幅を定義して、これらのビット数のみを使用していることを C コンパイラに伝えることができます。たとえば、上記の構造は次のように書き換えることができます。 -

struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status;

上記の構造は、4 ビットの状態変数用のメモリ スペースを必要としますが、値の格納に使用するのは 2 ビットのみです。

最大 32 個の変数が使用され、各変数の幅が 1 ビットである場合、ステータス構造体も 4 ビットを使用します。ただし、変数が 33 個になると、メモリの次のスロットが割り当てられ、8 ビットの使用が開始されます。この概念を理解するために、次の例を確認してみましょう -

サンプル コード

ライブ デモンストレーション

#include <stdio.h>
#include <string.h>
/* define simple structure */
struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status1;
/* define a structure with bit fields */
struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status2;
int main( ) {
   printf( "Memory size occupied by status1 : %d</p><p>", sizeof(status1));
   printf( "Memory size occupied by status2 : %d</p><p>", sizeof(status2));
   return 0;
}

出力

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

ビットフィールド宣言:

ビットフィールド宣言は、構造内で次の形式になります -

struct {
   type [member_name] : width ;
};

次の表では、ビットフィールドの変数要素について説明します-

要素 説明 th>
type ビットフィールド値がどのように解釈されるかを決定する整数型。型は、int、signed int、または unsigned int のいずれかです。
member_name ビット フィールドの名前。
ビットフィールドの桁数。幅は、指定された型のビット幅以下である必要があります。
#事前定義された幅で定義された変数はビット フィールドと呼ばれます。ビットフィールドは複数のビットを保持できます。たとえば、0 から 7 までの値を格納する変数が必要な場合は、以下に示すように 3 ビット幅のビットフィールドを定義できます。構造体定義は、age 変数が値を格納するために 3 ビットのみを使用するように C コンパイラーに指示します。 3 ビットを超えるビットを使用しようとすると、それは許可されません。次の例を試してみましょう。

サンプル コード

ライブ デモンストレーション

struct {
   unsigned int age : 3;
} Age;

出力

#include <stdio.h>
#include <string.h>
struct {
   unsigned int age : 3;
} Age;
int main( ) {
   Age.age = 4;
   printf( "Sizeof( Age ) : %d</p><p>", sizeof(Age) );
   printf( "Age.age : %d</p><p>", Age.age );
   Age.age = 7;
   printf( "Age.age : %d</p><p>", Age.age );
   Age.age = 8;
   printf( "Age.age : %d</p><p>", Age.age );
   return 0;
}

以上がC のビットフィールドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。