当前位置: 首页 > news >正文

位域

位域 :  
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:    
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位。对于位域的定义尚有以下几点说明:   

1. 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:    
struct bs   
{   
unsigned a:4   
unsigned :0 /*空域*/   
unsigned b:4 /*从下一单元开始存放*/   
unsigned c:4   
}   
在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。   

2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。   

3. 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。例如:    
struct k   
{   
int a:1   
int :2 /*该2位不能使用*/   
int b:3   
int c:2   
};   
从以上分析可以看出,位域在本质上就是一种结构类型, 不过其成员是按二进位分配的。 

 

二、位域的使用位域的使用和结构成员的使用相同,其一般形式为: 位域变量名•位域名 位域允许用各种格式输出。   
main(){   
struct bs   
{   
unsigned a:1;   
unsigned b:3;   
unsigned c:4;   
} bit,*pbit;   
bit.a=1;   
bit.b=7;   
bit.c=15;   
pri

 

转载于:https://www.cnblogs.com/Ph-one/p/6376096.html

相关文章:

  • OTN / SONET / SDH
  • 波分复用技术
  • ATM网络
  • 教你如何认识各种光纤接口类型
  • 网线与光纤接口几条线介绍
  • CPU上电时序详细分析
  • 下载模式
  • 以太网接口TCP/IP协议介绍,说的很容易懂了
  • 基于嵌入式Linux的千兆以太网卡驱动程序设计及测试
  • 数据结构基础知识(1)
  • 数据结构之队列
  • 数据结构基础知识(2)
  • 软考之操作系统(1)
  • 高效编程之互斥锁和自旋锁的一些知识
  • 信号量,互斥锁,自旋锁
  • 【Leetcode】101. 对称二叉树
  • 【mysql】环境安装、服务启动、密码设置
  • Angular6错误 Service: No provider for Renderer2
  • Docker入门(二) - Dockerfile
  • gitlab-ci配置详解(一)
  • Java IO学习笔记一
  • JavaScript的使用你知道几种?(上)
  • java正则表式的使用
  • Linux Process Manage
  • SQLServer之创建数据库快照
  • Transformer-XL: Unleashing the Potential of Attention Models
  • v-if和v-for连用出现的问题
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • webpack入门学习手记(二)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 阿里云Kubernetes容器服务上体验Knative
  • 闭包,sync使用细节
  • 闭包--闭包之tab栏切换(四)
  • 后端_MYSQL
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于组件的设计工作流与界面抽象
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 7行Python代码的人脸识别
  • ​Python 3 新特性:类型注解
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (13):Silverlight 2 数据与通信之WebRequest
  • (23)Linux的软硬连接
  • (day 12)JavaScript学习笔记(数组3)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (第61天)多租户架构(CDB/PDB)
  • ****Linux下Mysql的安装和配置
  • ***通过什么方式***网吧
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET 使用 XPath 来读写 XML 文件
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .net下简单快捷的数值高低位切换
  • /bin/rm: 参数列表过长"的解决办法
  • ::