C Primer Plus--位操作
位字段 bit field
位字段是一个
signed int或者unsigned int中一组相邻的位。位字段由一个结构声明建立,该结构声明为每个字段提供标签,并决定字段的宽度。
struct p {
unsigned int autfd : 1;//autfd字段占一个int其中的1位宽度
unsigned int bldfc : 1;
unsigned int undln : 1;
unsigned int itals : 1;
//字节剩下的位空出
} ;
struct p pt;
pt.autfd = 0;
pt.bldfc = 1;
//...
这里生命了一个p,其包含四个一位字段。p被存储在一个usigned int大小的存储单元中,但仅使用了其中的4位。
字段的位数可以是多位。
struct pp {
unsigned int code1 : 2;
unsigned int code2 : 2;
unsigned int code3 : 4;
unsigned int code4 : 1;
} ;//pp中声明了两个2位字段,一个4位字段,一个1位字段
pp会占两个unsigned int存储单元,但是只会按顺序使用其中的9位。
如果声明的位字段总位数超过一个unsigned int空间,像上面那样,相邻的下一个unsigned int存储空间会被利用。但是不允许一个位字段的位数跨越两个unsigned int的边界。当出现一个位字段位数跨越了边界时,编译器会自动移除掉这个位字段,空出来,就像一个洞一样,使得边界对齐。
可以使用未命名的字段填充这样的洞。当指定未命名位字段宽度为0时,会使得下一个位字段变量移动到下一个unsigned int边界开始计算位数。
struct ppp {
unsigned int field1 : 2;
unsigned int : 2;//空出两位
unsigned int field2 : 3;//然后才算field2占3位
unsigned int : 0;//field3必须从下一个unsigned int开始算位数
unsigned int field3 : 2;
};
位字段由于在不同机器上可能会有不同的存储顺序,对于字段边界位置也有区别,因此难以移植。
这样的结构赋值可以像普通struct那样进行赋值:
struct {
unsigned int field1 : 2;
unsigned int : 2;//空出两位
unsigned int field2 : 3;//然后才算field2占3位
unsigned int : 0;//field3必须从下一个unsigned int开始算位数
unsigned int field3 : 2;
} ppp = {
1,1,3
};//需要注意1,1,3按顺序值不能超出位字段位数限制
这一章我没有仔细看。
C Primer Plus--位操作的更多相关文章
- C Primer Plus之位操作
二进制补码表示法 几乎所有的计算机都使用二进制补码表示法来存储位于n位存储单元中的有符号整数. 在二进制补码表示法中,最左位决定符号.如果它是0,该整数为正(即非负):如果是1,该整数为负 ...
- C语言学习书籍推荐《C Primer Plus(中文版)(第5版)》下载
普拉塔 (Prata S.) (作者), 云巅工作室 (译者) <C Primer Plus(中文版)(第5版)>共17章,介绍了C语言的基础知识,包括数据类型.格式化输入输出.运算符.表 ...
- 《C Primer Plus(第6版)(中文版)》普拉达(作者)epub+mobi+azw3
内容简介 <C Primer Plus(第6版)中文版>详细讲解了C语言的基本概念和编程技巧. <C Primer Plus(第6版)中文版>共17章.第1.2章介绍了C语言编 ...
- 关于C primer plus 的学习计划(暂停)
最近想学数据结构,但是C的基础不够好,想借着C primer plus补一下基础.怎料第一章看的还挺快,到第二章看了二十多天.现在改改阅读方式:每日在这里添加进度,然后精看例题习题和章总结,其它简略看 ...
- C Primer Plus(三)
重读C Primer Plus ,查漏补缺 重读C Primer Plus,记录遗漏的.未掌握的.不清楚的知识点 文件输入/输出 1.fgets函数在读取文件内容时会将换行符读入,但gets不会,fp ...
- C Primer Plus 学习体会
本月刚刚开始学习<C primer plus>,之前课上草草学过一遍,讲到指针就结束了.现在重新开始看感觉难度不大只是刚开始接触有些语言细节比较琐碎.学习这一周的体会如下: 诸多前辈推荐的 ...
- C++ Primer Plus 第六版笔记
C++ Primer Plus 第六版笔记 关于对象声明的思考 转自:http://www.cnblogs.com/weiqubo/archive/2009/11/02/1930042.html C+ ...
- 《3D Math Primer for Graphics and Game Development》读书笔记2
<3D Math Primer for Graphics and Game Development>读书笔记2 上一篇得到了"矩阵等价于变换后的基向量"这一结论. 本篇 ...
- 《3D Math Primer for Graphics and Game Development》读书笔记1
<3D Math Primer for Graphics and Game Development>读书笔记1 本文是<3D Math Primer for Graphics and ...
- 《Entity Framework 6 Recipes》中文翻译系列 (19) -----第三章 查询之使用位操作和多属性连接(join)
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-16 过滤中使用位操作 问题 你想在查询的过滤条件中使用位操作. 解决方案 假 ...
随机推荐
- 30个关于Shell脚本的经典案例(下)
本文目录 21.从FTP服务器下载文件 22.连续输入5个100以内的数字,统计和.最小和最大 23.将结果分别赋值给变量 24.批量修改文件名 25.统计当前目录中以.html结尾的文件总大 26. ...
- Java 之 Response 文件下载案例
文件下载需求: 1. 页面显示超链接 2. 点击超链接后弹出下载提示框 3. 完成图片文件下载 分析过程: 1. 超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,如果不能解析,则弹出下载提示框 ...
- 水泥caement单词
Caement英语单词,翻译为:水泥 中文名:水泥 外文名:caement 目录 释义 caement 读音:英 [sɪˈment] 美 [sɪˈmɛnt] Noun名词. 水泥; caement在英 ...
- 英语DIAMAUND钻石指坚硬不可侵犯的物质
首先谈谈钻石和金刚石的名称.金刚石是一种天然矿物,是钻石的原石.习惯上人们常将加工过的金刚石称为钻石,而未加工过的称为金刚石(当然,有的金刚石不用加工便可应用).钻石是那些达到宝石级别的金刚石晶体切磨 ...
- 因改漏洞而引申了解的Cookie机制!
近期因为修改漏洞:Appscan扫描漏洞:加密会话(SSL)Cookie中缺少Secure属性,而涉及到Cookie有关的知识,现结合该漏洞的修复过程和了解的cookie知识总结一下. 一.加密会话( ...
- linux技能五 文件权限
文件权限:-rw-r--r--. 1 fileInUser fileInGroup 1623 5月 4 19:33 fileName -:第一个-是文件类型 rw-:文件的所有者权限 r--:文件的 ...
- Cloudera Certified Associate Administrator案例之Configure篇
Cloudera Certified Associate Administrator案例之Configure篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.下载CDH集群中最 ...
- kubernetes存储之GlusterFS
目录 1.glusterfs概述 1.1.glusterfs简介 1.2.glusterfs特点 1.3.glusterfs卷的模式 2.heketi概述 3.部署heketi+glusterfs 3 ...
- Linux必知必会--grep
花更少的时间,去验证一件事情:你到底是富翁,还是贫民. --一位历经沧桑的炒客 转自:https://man.linuxde.net/grep grep命令 grep(global search re ...
- HDU1395 2^x mod n = 1——积与余数的性质
对于数论的学习比较的碎片化,所以开了一篇随笔来记录一下学习中遇到的一些坑,主要通过题目来讲解 本题围绕:积与余数 HDU1395 2^x mod n = 1 题目描述 输入一个数n,如果存在2的x次方 ...