博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
位字段
阅读量:4052 次
发布时间:2019-05-25

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

位字段对我来说,一直是个陌生的概念,因为平时不经常用到。但是并不是因为它没有实用价值,而是我平时只编编小程序而已。但是它却是个经常被考到的概念。可能就因为它很实用又很迷惑吧!所以,我现在想把它作个总结,但是可能也不全面。还有它经常与sizeof()一起被涉及到,但我发现我的帖子总是贴很长,使人看了就要畏惧心理,所以我想分开总结一下这两个概念。     

下面先总结下“位字段”的几个概念:

      定义:位字段简称字段,是“字”中相邻位的集合;所谓“字”是由实现定义的单一存储单元。字段定义和访问的语法基于结构。

      位字段所允许的类型:C语言允许unsigned int类型,signed int类型或int类型的位字段,分别称为无符号字段,带符号字段和普通位字段。和普通字符一样,普通位字段可以无符号或带符号。C99允许_Bool类型的位字段。

      应用:位段结构也是一种结构体类型,只不过其中含有以位为单位定义存储长度的整数类型位段成员。采用位段结构既节省存储空间,又可方便操作。

    定义格式:unsigned <成员名>:<二进制位数>

    例如:

    struct bytedata
   {
         unsigned a:2;  
         unsigned:6;    
         unsigned:0;    
         unsigned b:10;
         int i;               
    } data;
     位段数据的引用:
     同结构体成员中的数据引用一样,但应注意位段的最大取值范围不要超出二进制位数定的范围,否则超出部分会丢弃。
     例如:data.a=2;   但 data.a=10;就超出范围(a占2位,最大3)

注意:
(1)一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元空间不够,则剩余空间不用,从下一个单元起存放该位段。
(2)可以通过定义长度为0的位段的方式使下一位段从下一存储单元开始。
(3)可以定义无名位段。
(4)位段的长度不能大于存储单元的长度。
(5)位段无地址,不能对位段进行取地址运算。
(6)位段可以以%d,%o,%x格式输出。
(7)位段若出现在表达式中,将被系统自动转换成整数。

以上文献最后两段是转载网上的,特此声明。这篇文章其实并没有写完整位字段,但是目前我也没想出什么,等以后想到再加以补充吧!

你可能感兴趣的文章
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>
学习设计模式(3)——单例模式和类的成员函数中的静态变量的作用域
查看>>
自然计算时间复杂度杂谈
查看>>
当前主要目标和工作
查看>>
使用 Springboot 对 Kettle 进行调度开发
查看>>
一文看清HBase的使用场景
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>