首页 / 软件开发 / C语言 / 学点C语言(27):数据类型 - 结构中的“位字段”
学点C语言(27):数据类型 - 结构中的“位字段”2010-04-30 博客园 万一所有基础的数据类型, 最大的也不过 10 个字节;我们可以自定义的数据类型 -- "结构", 通过把若干类型组合在一起, 让一种类型可以大很多.我们知道, 一个字节有八个 Bit 组成; 能否把一种类型缩小、缩小到 Bit 级?结构中的 "位字段" 是以 Bit 为单位的, 这已经是计算机的最小单位, 大小是 char 类型的 1/8.下面的例子中定义的位字段, 分别有 1-4 Bit 大小; 1 Bit 的字段只能放两个数(0、1), 4 Bit 的字段也只能放下 16 个数:1. 结构体可以包含位字段:#include <stdio.h>
int main(void)
{
struct Bit {
unsigned a: 1; /* 1 Bit, 取值范围: 0 - 1 */
unsigned b: 2; /* 2 Bit, 取值范围: 0 - 3 */
unsigned c: 3; /* 3 Bit, 取值范围: 0 - 7 */
unsigned d: 4; /* 4 Bit, 取值范围: 0 - 15 */
} B;
B.a = 1;
B.b = 3;
B.c = 7;
B.d = 15;
printf("%d, %d, %d, %d
", B.a, B.b, B.c, B.d);
getchar();
return 0;
}
上例中, 位域的类型被指定为是无符号的整型(unsigned int), 我试着只要是整型都可以, 但要一致.假如我们定义 8 个字段, 每个字段都是 1 Bit, 就可以很好地明细一个字节, 譬如:11111111B = 255;00000001B = 1;00001111B = 15;01111111B = 127;下面的例子用程序对上面的说明做了落实: