位域的优点:
1、有些信息在存储时,并不需要占用一个完整的字节,而只需要占几个或一个二进制位。例如存放一个开关量时,只有0和1两种状态,用一位二进制即可。这样不仅节省空间,而且处理简便。这样就可以把几个不同的对象用一个字节的二进制位域来表示;
2、可以很方便地利用位域把一个变量按位分解,比如只需要4个大小在0-3的随机数,就可以只rand()一次,然后每个位域取2个二进制位即可,省时省空间。
位域的缺点:
不同系统对位域的处理可能有不同的结果,如位域成员在内存中是从左向右分配的还是从右向左分配的(大端小端),所以位域的使用不利于程序的可移植性。
typedef struct { unsigned char TIM_Start_Stop : 1;//起始位,占1位 unsigned char TIM_Overflow : 1; unsigned char TIM_Div : 4; unsigned char TIM_Start: 2;//最高位,占2位}TimReg_t;int main(int argc, const char * argv[]) { TimReg_t timeReg; timeReg.TIM_Start_Stop = 0b1; timeReg.TIM_Overflow = 0b0; //timeReg.TIM_Div = 0b1001; timeReg.TIM_Div = 20;//会报警告,超过4位,会从最低位截取4位,高位被抛弃 timeReg.TIM_Start = 0b01; //打印timeReg的成员变量16进制值 printf("timeReg.TIM_Start_Stop : %#xn",timeReg.TIM_Start_Stop); printf("timeReg.TIM_Overflow : %#xn",timeReg.TIM_Overflow); printf("timeReg.TIM_Div : %#xn",timeReg.TIM_Div); printf("timeReg.TIM_Start : %#xn",timeReg.TIM_Start); //打印timeReg的值 unsigned char* p = (unsigned char*)&timeReg; printf("the data of struct storage value is %#xn",*p);}