博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构体位域介绍
阅读量:5291 次
发布时间:2019-06-14

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

一、位域的形式

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种

状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”

是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。

这样就可以把几个不同的对象用一个字节的二进制位域来表示。

注:因编译平台的不同,数据类型的长度也可能有异,以下int代表16Bit型。

 

1. 位域的定义和位域变量的说明

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

其中位域列表的形式为:

类型说明符 位域名:位域长度

如:

struct bs{    int a:8;    int b:2;    int c:6;};

位域变量的说明与结构变量说明的方式相同。 可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如:

struct bs{    int a:8;    int b:2;    int c:6;} data;

说明data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位。

注:一个位域必须存储在同一个字节中,不能跨两个成员变量类型。如一个成员变量所剩空间不够存放另一位域时,应从下一成员变量起

存放该位位域。

例如:

struct bs{    int a:4;    int :0;   /*空域*/    int b:4; /*从下一字节地址开始存放*/    int c:4;};

在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。

 

2. 位域可以无位域名,这时它只用一作填充或调整位置。无名位域是不能使用的。如:

struct test{    unsigned char a:1;    unsigned char :2;  /*该2位不能使用*/    unsigned char b :3;    unsigned char c :2;};

从以上分析可以看出,位域在本质上就是一种结构类型, 不过其成员是按二进位分配的。

转载于:https://www.cnblogs.com/aqing1987/p/4328388.html

你可能感兴趣的文章
python 多线程并发threading & 任务队列Queue
查看>>
【黑马程序员】资深程序员的见解
查看>>
1_fbauto
查看>>
IO体系、集合体系、多线程、jdbc
查看>>
关于时间:UTC/GMT/xST/ xDT
查看>>
[51Nod1089] 最长回文子串 V2(Manacher算法)
查看>>
Asp.Net生命周期系列六
查看>>
php引用 =& 详解
查看>>
Codeforces 914D Bash and a Tough Math Puzzle (ZKW线段树)
查看>>
POJ 3009: Curling 2.0
查看>>
DLNA介绍(包含UPnP,2011/6/20 更新)
查看>>
ANGULARJS5从0开始(2) - 整合bootstrap和font-awesome
查看>>
Android 使用Parcelable序列化对象
查看>>
Python Web框架Django (零)
查看>>
Foxmail出现 错误信息:553 mailbox not found怎么解决
查看>>
spring_远程调用
查看>>
js 中基本数据类型和引用数据类型 ,,,, js中对象和函数的关系
查看>>
登录服务器,首先用到的5个命令
查看>>
多米诺骨牌
查看>>
区间DP 等腰三角形
查看>>