比特域

来源:互联网 发布:ov7670 linux 编辑:程序博客网 时间:2024/04/27 22:48

比特域是一种由结构体扩展而来的数据结构组织形式,也称为位域,占位符等。

类似下面的定义:

structcard{

unsigned int pips:4;//占据4个位的长度

unsigned int suit:2;

unsigned char kq:2;

...}

跟在变量声明后面的非负正常数是该数据所占据的比特宽度,比特宽度最多是机器字的长度,对于PC机和Windows操作系统而言,这个值是32

一个32位的int型数据可以存放的数据范围是极大的,在我们的程序中往往并不需要这样大的表示范围,因此,使用比特域把数据压缩到一定的表示范围内,

可以有效的节省程序所需要的内存量,这在系统内存容量极为有限的嵌入式系统开发中是很重要的!

在上面的结构中,card变量拥有一个4比特的域pips来存贮0--15的非负整数,

一个2比特的域suit来存贮0--3

以及一个2比特的域kq实际上,上面定义中的intchar在很多情况下也是可以省略掉的,这样在比特域中所定义的数据结构实际上就与这些基本类型是无关的,只是表示一定区域的一些有符号整形数或者无符号整形数。因此,在声明变量的时候unsigned或者signed是必须注明的,因为编译器需要确切的知道所定义的变量的精确取值范围。

但是,应该注意的是:不同的编译器对于比特域如何分配是有不同定义的,而且使用比特域组织的程序往往可移植性不好,因此,除非是确实需要节省内存,

否则比特域(包括联合)最好不要使用。


原创粉丝点击