范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

CC位域Bitfields学习心得

  Bit field 的定义
  "位域" 或 "位段"(Bit field)为一种数据结构,可以把数据以位的形式紧凑的储存,并允许程序员对此结构的位进行操作。这种数据结构的一个好处是它可以使数据单元节省储存空间,当程序需要成千上万个数据单元时,这种方法就显得尤为重要。第二个好处是位段可以很方便  的  访问一个整数值的部分内容从而可以简化程序源代码。而这种数据结构的缺点在于,位段实现依赖于具体的机器和系统,在不同的平台可能有不同的结果,这导致了位段在本质上是不可移植的.
  位域的声明:
  位域使用以下的结构声明 , 该结构声明为每个位域成员设置名称,并决定其宽度 struct bit_field_name { 	type member_name : width; };
  Elements
  Description
  bit_field_name
  位域结构名
  type
  位域成员的类型,必须为 int、signed int 或者 unsigned int 类型
  member_name
  位域成员名
  width
  规定成员所占的位数
  例如声明如下一个位域: struct _PRCODE { 	unsigned int code1: 2; 	unsigned int cdde2: 2; 	unsigned int code3: 8; }; struct _PRCODE prcode;
  该定义 使   prcode  包含 2 个 2 Bits 位域和 1 个 8 Bits 位域,我们可以使用结构体的成员运算符对其进行赋值 prcode.code1 = 0; prcode.code2 = 3; procde.code3 = 102;
  tips:
  赋值时要注意值的大小不能超过位域成员的容量,例如 prcode.code3 为 8 Bits 的位域成员,其容量为 2^8 = 256,即赋值范围应为 [0,255]。 位域的大小和对齐位域的大小
  例如以下位域: struct box  { 	unsigned int a: 1; 	unsigned int  : 3; 	unsigned int b: 4; };
  该位域结构体中间有一个未命名的位域,占据 3 Bits,仅起填充作用,并无实际意义。 填充使得该结构总共使用了 8 Bits。但 C 语言使用 unsigned int 作为位域的基本单位,即使一个结构的唯一成员为 1 Bit 的位域,该结构大小也和一个 unsigned int 大小相同。 有些系统中,unsigned int 为 16 Bits,在 x86 系统中为 32 Bits。文章以下均默认 unsigned int 为 32 Bits。 位域的对齐
  一个位域成员不允许跨越两个 unsigned int 的边界,如果成员声明的总位数超过了一个 unsigned int 的大小, 那么编辑器会自动移位位域成员,使其按照 unsigned int 的边界对齐。
  例如: struct stuff  { 	unsigned int field1: 30; 	unsigned int field2: 4; 	unsigned int field3: 3; };
  field1 + field2 = 34 Bits,超出 32 Bits, 编译器会将field2移位至下一个 unsigned int 单元存放, stuff.field1 和 stuff.field2 之间会留下一个 2 Bits 的空隙, stuff.field3 紧跟在 stuff.field2 之后,该结构现在大小为 2 * 32 = 64 Bits。
  这个空洞可以用之前提到的未命名的位域成员填充,我们也可以使用一个宽度为 0 的未命名位域成员令下一位域成员与下一个整数对齐。
  例如: struct stuff  { 	unsigned int field1: 30; 	unsigned int       : 2; 	unsigned int field2: 4; 	unsigned int       : 0; 	unsigned int field3: 3;  };
  这里 stuff.field1 与 stuff.field2 之间有一个 2 Bits 的空隙,stuff.field3 则存储在下一个 unsigned int 中,该结构现在大小为 3 * 32 = 96 Bits。 位域的初始化和位的重映射初始化
  位域的初始化与普通结构体初始化的方法相同,这里列举两种,如下: struct stuff s1= {20,8,6};
  或者直接为位域成员赋值 struct stuff s1; s1.field1 = 20; s1.field2 = 8; s1.field3 = 4;位域的重映射 (Re-mapping)
  声明一个 大小为 32 Bits 的位域 struct box { 	unsigned int ready:     2; 	unsigned int error:     2; 	unsigned int command:   4; 	unsigned int sector_no: 24; }b1;
  利用重映射将位域归零 int* p = (int *) &b1;  // 将 "位域结构体的地址" 映射至 "整形(int*) 的地址"  *p = 0;                // 清除 s1,将各成员归零
  利用联合 (union) 将 32 Bits 位域 重映射至 unsigned int 型
  先简单介绍一下联合
  "联合" 是一种特殊的类,也是一种构造类型的数据结构。在一个 "联合" 内可以定义多种不同的数据类型, 一个被说明为该 "联合" 类型的变量中,允许装入该 "联合" 所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的
  "联合" 与 "结构" 有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和(空结构除外,同时不考虑边界调整)。而在 "联合" 中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。
  我们可以声明以下联合: union u_box {   struct box st_box;        unsigned int ui_box; };
  x86 系统中 unsigned int 和 box 都为 32 Bits, 通过该联合使 st_box 和 ui_box 共享一块内存。具体位域中哪一位与 unsigned int 哪一位相对应,取决于编译器和硬件。
  利用联合将位域归零,代码如下: union u_box u; u.ui_box = 0;
  文章转载自: http://www.yuan-ji.me/C-C-%E4%BD%8D%E5%9F%9F-Bit-fields-%E5%AD%A6%E4%B9%A0%E5%BF%83%E5%BE%97/

2022年换机指南!4款霸占榜首的手机,每一款都是各领域的王者进入2022年,手机市场正在上演着激烈的战争,各大手机品牌纷纷摩拳擦掌。在过去的一年当中,各大品牌发布了不少新机。有句话叫货比三家,如今正是换机的最佳时刻。那么面对琳琅满目的新机,技术分享Selenium测试用例编写本文节选自霍格沃兹测试开发学社内部教材编写Selenium测试用例就是模拟用户在浏览器上的一系列操作,通过脚本来完成自动化测试。编写测试用例的优势开源,免费。支持多种浏览器IE,F捡漏!直降1400元送599元配件!12G512G1亿像素,雷军实力宠粉捡漏!直降2000元送599元配件!12G512G1亿像素,雷军实力宠粉本文原创,禁止搬运和抄袭,违者必究!导语用最少的钱买到配置和性价比都更顶级的旗舰手机,或许是每一个捡漏党们共余承东万万没想到,华为AITO年销目标彻底泡汤?引言不管怎么说,华为进军智能电动车整车领域的决心和潜质,远远不是一个30万辆短期目标能够概括得了的。余承东呢,牛人爱吹牛敢吹牛,生死看淡,不服干就是了!华为2022年卖出30万辆汽卢伟冰很无奈,120W快充三星屏一亿像素,仅1999元为何没人买?作为国内性价比厂商的龙头,红米手机向来很受欢迎,基本上每款都可以闭眼买,但如果真的要比较,在这其中也有一些产品,其实是没有那么真香的,有的是因为配置存在缺陷,有的则是价格不够理想,关键时刻!阿里技术副总裁贾扬清出走美国,本人做出回应本文原创,请勿抄袭和搬运,违者必究一则阿里技术副总裁贾扬清逃往美国的消息在网上广泛传播,事件起因是贾扬清在上海疫情防控的关键时刻,去往了美国。按照贾扬清的话说,去美国是正常差旅,到盈立智投硬气!靠谱!股票大跌补救计划当股价从372美元跌到104美元后,小腾讯Sea的总市值缩水了72。前两年入职这家东南亚电商,并在高位买了公司股票的刘文,望着股票账户,叹了一口气说纸上富贵也就罢了!作为一个技术员安徽加强五一期间网络交易违法行为监测记者昨日从省市场监管局获悉,4月20日至5月20日,该局将在全省范围内加强五一期间网络交易违法行为监测。本次监测以省外重点电商平台内的本地经营者本地网络交易平台及平台内经营者为监测苦等10年,微信朋友圈要全面升级?大家知道昨天是啥日子吗?是鸭鸭居家办公的第二天也是微信朋友圈的10周岁生日!微信官方也整了个大动作,挑选了365位用户的朋友圈,组成了朋友圈的365天,为自家的明星产品庆生。图片来申通快递今年一季度利润预增200与疫情前相比仅恢复近三成水平新快报讯记者林广豪报道A股快递企业3月经营数据近日公布,申通快递的同比增速在通达系企业中占据优势。申通快递预计,今年一季度净利润为0。9亿1。2亿元,同2G网络退市目前全社会已经全面进入信息化时代,6G网络已经开始研发,各个行业的应用已经开展,有了明显的时代特征,而中国移动2G网络正在逐步的退网,退出频段给4G使用。目前中国移动正在给2G客户
暖心计划彰显阿里巴巴数字时代与时俱进的人才观近日,阿里巴巴在内网公布了多项针对员工关怀的暖心计划,包含多项员工福利升级除率先响应国家号召延长产假新增育儿假外,并推出了7天全薪陪伴假10天育儿假20天全薪长期服务假,同时新增交比特币这么多年为什么技术和开始差不多?比特币开发者们一直致力于解决扩展性问题,他们不是没思考过扩容降低出块时间缩减节点这些简单方案,但这些方案都很容易遇到瓶颈且极易造成中心化,同时由于存在损害比特币独特的不变性和抗审查互联网大厂裁员寒潮来袭新时代的集体下岗,年轻人还有哪些退路临近年关,各大互联网平台纷纷迎来寒潮期,淘宝小红书微信QQ美团都不约而同地发生服务无响应等崩了的故障,导致集体宕机。很多互联网大厂在突然崩了的同时,也开启了裁员模式,来度过这个可能人工智能从作坊式走向工业化新时代来源人民网原创稿中国科学院自动化研究所所长徐波。受访者供图人工智能创新不断一体两翼快速发展人民网当前,人工智能技术创新不断,应用层出不穷。它究竟走到了哪一步?能否谈谈您是如何看待我用户满意度达传统笔记本电脑3倍?移动PC时代已来移动PC可以是怎样的设备?结合智能手机的灵活体验和PC的生产力,移动PC一方面能带来始终在线长时间续航突出的影像表现即时唤醒等媲美智能手机的体验,另一方面具备更大屏幕更高输入效率更30极寒冷冻情况下,看华米OViPhone谁最待机时间最长?最近看了一个手机评测UP主新评科技,他做了一个耐低温的评测,很有意思,他用11款旗舰机做耐冻横评,在30极寒条件下,看华米OViPhone谁最先关机?而表现最好的依然还是华为荣耀,人类面临一场可怕灾难?青藏高原异象频出,新德里紧急下达封城令南北极冰川融化速度加快,给人类传递出一个危险信号,那就是全球变暖已成定局。就在这时,青藏高原传出不小的异动,给亚洲地区民众敲响警钟,科学家当即发出警告,直言人类正在或者即将面临一场合成生物学引领未来的生命科技12月13日,华熙生物董事副总经理董秘李亦争先生在36氪资本市场高峰论坛上发表了合成生物学引领未来的生命科技的主题演讲。所谓合成生物学,是结合了生物工程大数据人工智能高通量筛选基因38岁去世,22岁出家,神童和天才们的人生为什么都惨淡收场?昨天看到一则消息,腾讯知名程序员毛星云于12月11日上午跳楼身亡,年仅30岁。91年的他,毕业于南京航天航空大学,获得过微软MVP,出版过两本计算机编程书籍,就职于腾讯天美工作室群为什么三星的amoled屏幕那么多缺陷寿命短,有烧屏等,为什么还那么热销?作为三星粉,这个问题我来回答!在解答问题之前先说一下三星的A屏发光原理,其余也就是所有OLED屏幕的发光原理。相比较传统LCD屏幕,OLED并不存在背光单元,因为OLED屏幕中的像骨传导耳机是智商税?斥巨资1000多买了个南卡,聊聊具体使用感受你们有用过骨传导蓝牙耳机吗?当我第一次听到骨传导这个概念的时候,心里默默在想,这一定是一个特别酷的全新物种,因为它没有扬声器,在我们传统的认知里,声音是由扬声器发出来的,没有扬声器