構造体のビットドメイン

4039 ワード

情報を格納するときに完全なバイトを必要とせず、いくつかのバイナリビットしか必要としない場合があります.C言語は、この場合にビットドメイン(ビットセグメント)と呼ばれるデータ構造を提供する.
定義:
struct name{
           :    ;   //         8(     ) 
};

注意:1つのビットドメインは同じバイトに格納する必要があります.2つの連続するビットドメインがある場合、1つのバイトに1つのビットドメインを格納した後の残りの空間が2つのビットドメインを格納するのに十分ではありません.2番目のビットドメインは新しいバイトに格納され、前のバイトに0が追加されていません.
struct bits{
	int a:4;   //       
	int b:5;   //       
};

また、ビットドメインを新しいバイトに明示的に格納することもできます.すなわち、空域を使用します.
struct bits{
    int a:4;  //       
    int :0;   //    
    int b:2;  //       
}; 

1つのビットドメインにビットドメイン名がない場合、それは充填または調整位置としてのみ使用され、使用できません(int:4は4ビットを占めるためにのみ使用されます).
ビットドメイン変数の説明は、構造変数の説明と同じです.先に定義してから説明し、同時に説明を定義したり、直接説明したりする3つの方法を採用することができます.例:
struct bits{
	int a:8;
	int b:2;
	int c:6;
}data;

説明dataはbits変数で、2バイトを占めています.ここで、ビットドメインaは8ビット、ビットドメインbは2ビット、ビットドメインcは6ビットを占める.
空域サイズ空域が占めるサイズとaのタイプと空域のタイプの両方が関連している.1、a、空域がcharの場合、両者は共に1バイトを占めている.aはunsigned、空域はunsignedである.aはcharであり、空域はunsignedである.aはunsigned、空域はcharである.この3つの場合,両者は4バイトを占めている.2、ビットドメインの長さは指定したタイプの固有長より大きくしてはならない.例えばintのビットドメインの長さは32を超えてはならない.boolのビットドメインの長さは8を超えてはならない.3、ビットドメインはビットドメイン名を持たないことができ、この場合、位置を入力または調整するためにのみ使用されます.無名のビットドメインは使用できません.例:
struct k{
	int a:1
	int :2 /* 2     */
	int b:3
	int c:2
};