一、位结构体:也叫位域结构体等等
a)位结构体:每个成员都可以用来做定义单位,可以小于1个字节或者半个字节。
普通变量没有小于1BYTE的单位。最小的类型char和bool都是1byte.
b)定义:
struct 结构体名
{
成员类型 成员变量名:位段(常量)
成员类型 成员变量名:位段(常量)
};
例如:使用4个字节表示年月日
d)位结构体定义时尽量所有成员使用相同类型。
e)成员类型必须满足最大成员的位数,例如:char 只能定义8位以内位段。
二、位域的特点:
a)位结构体的每个成员叫做位域,位域不能取地址。
b)如果位域是有符号整数,每个位域的最高位都是符号位
#include <stdio.h>
//struct SData
//{
// unsigned char c1 : 3; //0-7
// unsigned char c2 : 4;
// unsigned char c3 : 1;
//
//};
struct SData {
char c1 : 3;//取值范围:-4...-1 3
char c2 : 4;//取值范围:-8 ... -1 0 7
char c3 : 1;//取值范围:-1和0两种
};
int main()
{
printf("sizeof(SData)=%d\n", sizeof(SData));
SData d;
d.c1 = 8;
d.c2 = 7;
d.c2++;
d.c3 = 7;
//printf("c3的指针:0x%p\n", &d.c3);
return 0;
}