博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中的位域结构体
阅读量:4111 次
发布时间:2019-05-25

本文共 1292 字,大约阅读时间需要 4 分钟。

C语言中的位域结构体

一、什么是位域结构体?

    在数据表达的过程中,有的时候我们并不需要一个完整的字节来表示,例如在表示二逻辑状态数据的时候我们只需要一个二进制位(0、1)就能够很好的表达出来。同样的出于节省空间或者精简数据,减小数据大小,以提高数据传输速度等因素的考虑,C语言提供了一种称为位域(位段)的数据结构。在位域(位段)结构中,把一个字节中的二进位划分为几多个不同的区域,并对每个区域的位数加以说明(即给每个域提供一个域名,也可缺省),使得在程序中可以按域名对数据进行操作。

 

二、位域结构体如何定义?

    位域(位段)定义的格式与结构体的定义格式相类似:

struct 位域结构名   { 		位域列表     };

其中位域列表的形式为: 类型说明符 位域名:位域长度 

例如:

struct	{		unsigned int: 1;		// bit_0 位域名缺省, 无名位域		unsigned int bit_1 : 1;	// bit_ 位定义域名为 bit_1		unsigned int bit_2 : 1;			    		unsigned int bit_3 : 2;						unsigned int bit_5 : 1;				unsigned int bit_6 : 1; 					unsigned int bit_7 : 1;				} OneByte;						// 一个字节共8位

三、定义位域结构体时需要注意的问题

1、一个位域必须存储在同一个字节中,不能跨两个字节存储。如果一个字节所剩空间不够存放另一位域时,剩余的空间应该使用空域填充或无名位域填充,声明不使用,然后从下一单元开始存放这个位域。例如:

struct 	{  	unsigned a:4  	unsigned :0 /*空域,用于填充,声明本字节中剩余位不使用(空穴)*/  	unsigned b:4 /*从下一单元开始存放*/  	unsigned c:4	}TowByte;

2、一个位域的长度不能大于一个int的长度(32bit位)

3、一个位域可以不定义位域名,但此时它只能用来作填充或调整位置。无名位域是不能在程序中使用的。

四、位域变量的使用

位域变量的使用方式和结构成员的使用方式相同,其使用格式为:
位域变量名·位域名	位域变量指针->位域名
而且位域变量是允许使用各种格式输出的。例如:
OneByte b_Byte, *p_Byte;b_Byte.bit_2= 0;p_Byte->bit_3= 1;b_Byte.bit_5= 1;p_Byte->bit_6= 0;p_Byte->bit_7= 1;printf("%d,%d,%d\n", b_Byte.bit_2, p_Byte->bit_3, b_Byte.bit_5, p_Byte->bit_6, p_Byte->bit_7);p_Byte->bit_3 &= 0;p_Byte->bit_5 |= 0;printf("%d,%d\n",p_Byte->bit_3, b_Byte.bit_5);

转载地址:http://lmmsi.baihongyu.com/

你可能感兴趣的文章
poj 2456 Aggressive cows 整数二分写法 模板题
查看>>
poj 3104 Drying 二分搜索--查找最小yes值
查看>>
poj 3111 K Best 二分搜索 最大化平均值
查看>>
POj 3258 River Hopscotch 二分搜索 最大化最小值
查看>>
poj 2674 Linear world 弹性碰撞 升级的蚂蚁
查看>>
poj 2785 4 Values whose Sum is 0
查看>>
Codeforces Round #324 (Div. 2) A. Olesya and Rodion 构造数字 思维题
查看>>
Codeforces Round #324 (Div. 2) B. Kolya and Tanya 思维题 数论
查看>>
Poj 3977 Subset 折半枚举 超大背包
查看>>
poj 2549 Sumsets 折半枚举
查看>>
poj 3276 Face The Right Way 挑战150 反转
查看>>
poj 3279 Fliptile 反转
查看>>
poj 3185 The Water Bowls 反转(开关)
查看>>
poj 1930 Dead Fraction 循环小数的处理
查看>>
poj 3421 X-factor Chains 素数筛选 因子分解
查看>>
poj 3292 Semi-prime H-numbers 素数变形+打表+筛选法
查看>>
poj 3468 A Simple Problem with Integers 模板题 线段树 懒惰标记
查看>>
POJ 3264 Balanced Lineup 线段树 维护区间最大值和最小值 建树
查看>>
poj 3368 Frequent values 线段树 节点值得变化
查看>>
poj 1201 Intervals 线段树+贪心
查看>>