Cビットドメイン


ビットドメイン宣言:
構造内でビットドメインを宣言する形式は、次のとおりです.
次に、ビットドメイン変数要素について説明します.
struct 
{
	type [menber_name] : width;
};
            			                    
type         			     ,           。       、     、     。
menber_name      	              
width                        	        。                      

予め定義された幅を持つ変数をビットドメインと呼ぶ.ビットドメインは、1ビット以上の数を格納することができる.例えば、0から7までの値を格納する必要があり、width幅が3のビットドメインを定義して8ビットを表すことができる.
Cビットドメイン
プログラムの構成に複数のスイッチング量が含まれている場合、TRUE/FALSE変数のみ、以下のようになります.
struct 
{
	unsigned int switchValue1;
	unsigned int switchValue1;
}status;

この構造には8バイトの記憶領域が必要であるが,実際には各変数に0と1の2つの値しか記憶されていない.メモリ領域をより節約するために、これらのバイトを使用するだけで変数の幅を定義してコンパイラに伝えることができます.上記の構造体は次のように書くことができます.
struct 
{
	unsigned int switchValue1 : 1;
	unsigned int switchValue1 : 1;
}status;
のように、構造体ではstatus変数が4バイトのメモリ領域を占有するが、値を格納するために使用されるのは2ビットのみである.すなわち、32個の変数を格納する場合、各変数の幅が1ビットの場合、status構造は4バイトを使用します.しかし、32個以上の変数を格納する必要がある場合は、ここで32個の変数の格納が不十分であり、8バイトを使用して実現する必要があります.のように
#include 
#include 

struct 
{
	unsigned int switchValue1;
	unsigned int switchValue1;
}status1;

struct 
{
	unsigned int switchValue1 :1;
	unsigned int switchValue1 :1;
}status2;

int main(int argc, char const *argv[])
{
	printf("Menory size occupied  by status1 : %d
", sizeof(status1)); printf("Menory size occupied by status2 : %d
", sizeof(status2)); return 0; }
Menory size occupied  by status1 : 8
Menory size occupied  by status2 : 4
 
  
#include 
#include 

struct 
{
	unsigned int age : 3;
}Age;

int main()
{
	Age.age = 4;
	printf("sizeof(Age) : %d
",sizeof(Age)); printf("Age.age :%d
", Age.age); Age.age = 7; printf("Age.age :%d
", Age.age); Age.age = 8; printf("Age.age :%d
", Age.age); return 0; } : sizeof(Age) : 4 Age.age : 4 Age.age : 7 Age.age : 0