C のビットフィールド

WBOY
リリース: 2023-09-08 22:57:03
転載
1414 人が閲覧しました

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 ;
};
ログイン後にコピー

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

要素 説明
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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート