博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言位域
阅读量:5058 次
发布时间:2019-06-12

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

背景

感谢提供的C语言位域的相关信息。看着位域才记起来大学时候学习C语言的时候讲过这玩意儿,老师还出结构体、结构体和联合体混合所占用空间的大小的题目给我们,挖各种坑让我们跳,然后自然而然的就跳进去了,老师是领路人,特意挖坑给你跳,你还逃得过?好吧,其实还是学习的时候不够认真,哈哈。一直就是蒙着头干,突然才意识到,许多以前认为太复杂而当时没有实力去深究的东西现在应该去好好研究一番了。本篇就C语言位域做个简要说明。

正文

在下位机里面,会经常出现标识位,这东西占用1个字节而仅仅表示01,对于每寸空间必争的下位机代码,实在是太过奢侈,所以C语言就提供了位域或者说位段的数据结构。

所谓位域是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。每个域都有个域名,允许在程序中直接对域名进行操作。位域定义与结构体定义相仿,其形式为:

/*     Struct 位域结构名 {        位域列表:(类型说明符 位域名:位域长度);    };*/    struct bs {        int a:8;        int b:2;        int c:4;    };

其中,位域a占用8位,位域b占用2位,位域c占用4位。使用的方式如下:

struct bs bs_tst;    // 声明位域空间,名称为bs_tst    bs_tst.a = 1;    bs_tst.b = 7;    // 若是赋值超过位数,那么会自动截取保留对应的位数,超过位数丢弃譬如    bs_tst.c = 0x1c;        printf("a = %x; b = %x , c = %x", bs_tst.a, bs_tst.b, bs_tst.c);

实际输出结果bs_tst.a = 0x01; bs_tst.b = 0x07; bs_tst.c = 0x0c;

对于位域的定义和使用有以下几点需要说明:

  • 位域成员的类型必须为unsignedint型。
  • 一个位域必须存储在同一个字节中,不能跨字节,因此也可得出结论,1个位域不得超过8位。
  • 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。

参考链接:

;

至此记录完毕。

记录时间:2017-2-7

记录地点:深圳WZ

转载于:https://www.cnblogs.com/ChYQ/p/6375225.html

你可能感兴趣的文章
Java多线程-线程池
查看>>
采集网站特殊文件Meta信息
查看>>
DRF分页组件
查看>>
.NET基础操作回顾_使用ADO.NET操作SqlServer使用的类
查看>>
React中redux表单编辑
查看>>
uCGUI 驱动LCD提速 STM32F主芯
查看>>
response.setContentType()的作用及参数
查看>>
rabbitmq 死信邮箱配置(dead-letter)
查看>>
注入 Istio sidecar
查看>>
解决SQLServer数据库"因为它正用于复制"的错误!
查看>>
【Python】- 第一行跟第二行的写法
查看>>
Rotate List - LeetCode
查看>>
maven没有servlet(创建servlet后报错)
查看>>
域对象 request
查看>>
高可用之KeepAlived(2):keepalived+lvs
查看>>
LazyManage中文注释学习版
查看>>
JSJ——主数据类型和引用
查看>>
Alpha 冲刺 (8/10)
查看>>
Web网页安全色谱
查看>>
OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion) ...
查看>>