在结构体或类中,为了节省成员的存储空间,可以定义某些由位组成的字段,
这些字段可以不需要以byte为单位。 这些不同位长度的字段
实际存储于一个或多个整形变量。位段成员必须声明为int, signed int, unsigned int类型。
在成员的后面是一个冒号和一个整数,这个整数指定该位段所占用的位的数目。位段范例:
struct CHAR
{
unsigned ch : 7;
unsigned font : 6;
unsigned size : 19;
}
struct CHAR ch1;
这个声明取自一个文本格式化的代码,它可以处理多达128个字符(7个位),64种不同字体(6个位),0到524287个单位的长度。
位段使程序员能够利用存储ch和font所剩余的位来增加size的位数。
位段好处:
   1 能够把长度为奇数的数据包装在一起,节省存储空间。
   2 方便访问整形值的部分内容。
位段的缺点:
移植性较差,位段的成员在内存中是从左到右分配还是从右到左分配根据系统来定。
注意点:由于取地址操作符不能应用在位段上,所以没有能指向位段的指针。估计因为位段的存放位置不是按照字节为单位来存放的。
位段也不能是静态成员。

C语言中的位段(位域)知识的更多相关文章

  1. C语言中的位段----解析

    有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位. 例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可. 为了节省存储空间并使处理简便,C语言又提供了一种数据结 ...

  2. C语言中重要的小知识汇总

    用于整理记录一些C语言下的小知识点: 1. 在C语言中,怎么查看一个数据类型占用了多少个字节大小呢? 可以使用sizeof(int)/sizeof(double)等来查看某数据类型到底用了几个字节: ...

  3. C语言中宏的相关知识

    2019/04/27 16:02 1.宏的定义:宏定义就是预处理命令的一种,它允许用一个标识符来表示一个字符串.格式如下: #define name(宏名) stuff(字符串) 本质就是使用宏名去替 ...

  4. C语言中 指针的基础知识总结, 指针数组的理解

    1: 指针变量所占的字节数与操作系统为位数有关,64位操作系统下,占8个字节,32位操作系统下,占4个字节 2: 指针变量的本质是用来放地址,而一般的变量是放数值的3: 脱衣服法则: a[2] 变成 ...

  5. 关于C语言中的位域

    有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可.为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称 ...

  6. C语言中的位域的使用

    转载:http://blog.sina.com.cn/s/blog_648d306d0100mv1c.html C语言中的位域的使用一.位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几 ...

  7. C语言中的位域、字节序、比特序、大小端

    转:http://www.360doc.com/content/13/0624/10/496343_295125641.shtml 1.比特序 / 位序 /  bit numbering / bit  ...

  8. C语言中的基础知识变量探讨

    C语言中的变量是编程的基础,主要有四个要素:存储类型.存储大小.存储名称和存储地址. 一.变量的要素: 1.存储类型:主要表明名变量存储的特征,主要有auto.extern.static和regist ...

  9. C/C++ 位域知识小结

    C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存 ...

随机推荐

  1. java并发之非阻塞算法介绍

    在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法.在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的. 为了更好的理解阻塞算 ...

  2. Socket 聊天工具

    package cn.davy.mychat; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FontD ...

  3. 解决Debian 9 iwlwifi固件缺失导致无法连接无线网络的问题

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=692 前言: 本文介绍了解决Debian9安装完成后无法连接wifi的问题以及一些扩展知识. 问题描述: 安装Deb ...

  4. 使用JWT的OAuth2的SSO分析

    参考:https://github.com/spring-guides/tut-spring-security-and-angular-js/blob/master/oauth2/README.ado ...

  5. [TJOI2015] 棋盘

    Description 为了提高智商,ZJY去新世界旅游了.可是旅游过后的ZJY杯具的发现要打开通往原来世界的门,必须要解开门上面画的谜题.谜题是这样的:有个\(n\)行\(m\)列的棋盘,棋盘上可以 ...

  6. bolt_storage.go

    package, * time.Second})     if err != nil {         return nil, err     }     err = db.Update(func( ...

  7. maintenance.go

    package, && req.Alarm == pb.AlarmType_NONE {         ar, err := m.AlarmList(ctx)         if ...

  8. 在MFC中UpdateData()的作用

    UpdateData()用来刷新数据,其中UpdateData(true)将控件中的数据传递到控件捆绑的变量中去.UpdateData(false)将变量值传递到控件中去.例如:窗口中用 DDX_Te ...

  9. BZOJ_2073_[POI2004]PRZ_状压DP

    BZOJ_2073_[POI2004]PRZ_状压DP 题意: 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上 ...

  10. Python Django 2.2登录功能_2

    #Now 让我们继续对上篇的登录进行操作 #对于csrf,以后再开篇章记录 #修改index.html <form method="post" action="/l ...