本节介绍了位域:有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有 0 和 1 两种状态,用 1 位二进位即可。为了节省存储空间,并使处理简便,C 语言又提供了一种数据结构,称为"位域"或"位段"。
一个位域存储在同一个字节中,如一个字节所剩空间不够存放另一位域时,则会从下一单元起存放该位域。也可以有意使某位域从下一单元开始。
struct info { unsigned char a:4; unsigned char :4; /* 空域 */ unsigned char b:4; /* 从下一单元开始存放 */ unsigned char c:4 };
struct info { int a:1; int :2; /* 该 2 位不能使用 */ int b:3; int c:2; }st;
#include <stdio.h> struct bit { unsigned int a: 6; unsigned int b: 12; unsigned int c: 4; }bt; int main( ) { // 求sizeof(bt)的大小。 printf("sizeof(bt):%d\n", sizeof(bt)); return 0; }
运行结果
sizeof(bt):4
C语言中的位域,在节省空间、使用位进行相关处理时用处很大。