- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
9.2 位段结构 struct data { unsigned f1 :4; unsigned :0; /*分配时越过当前字节的剩余空间*/ unsigned :4; /*此4位空间不用*/ unsigned f2 :12; }; struct data fvar2; 9.2.2 位段结构的声明和变量定义 9.2 位段结构 fvar2结构体变量的存储空间如图9.2所示。 9.2.2 位段结构的声明和变量定义 9.2 位段结构 (2)常规结构体成员和位段成员可以定义在一个结构体中。例如: struct { short int n; unsigned int f1:4; unsigned int f2:4; } fvar3; 9.2.2 位段结构的声明和变量定义 9.2 位段结构 变量fvar3的存储结构如图9.3所示。 (3)位段存储空间的分配方向是从左至右,还是从右至左,随机器系统而异。IBM PC机是从右至左分配。 (4)不能定义元素为位段结构的数组。 9.2.2 位段结构的声明和变量定义 9.2 位段结构 (1)位段的引用形式与结构体成员相同。如fvar.f1、fvar2.f2等。 (2)位段的赋值。位段可以在定义的同时赋初值,形式与结构体变量赋初值相同;位段也可以进行赋值操作,例如: fvar.f1=1; fvar2.f2=5; 9.2.3 位段的引用 9.2 位段结构 赋值时应注意位段的取值范围,若写成: fvar.f1=2; 就会产生错误的结果。因为位段fvar.f1只占1位,只能取值0或1。对于以上赋值语句,系统并不报错,而是自动截取所赋值的低位:2的二进制码是10,取低一位为0。所以fvar.f1的值为0。 9.2.3 位段的引用 9.2 位段结构 (3)位段可以参与算术表达式的运算,系统自动将其转换成整型数。例如: fvar3.f1=4; fvar3.f2=8; fvar3.n=fvar3.f1+fvar3.f2; 9.2.3 位段的引用 9.2 位段结构 (4)位段可以利用整型格式描述符(%d、%u、%o、%x)进行输出。例如: printf("%d\n",fvar.f1); (5)不能对位段求地址。由于位段没有地址,所以不能对位段求地址,也不能通过scanf()语句输入位段值、不能用指针指向位段。 9.2.3 位段的引用 9.2 位段结构 【例9.2】位段输出程序示例。 【解】程序如下: /*文件名:lx9_2.cpp*/ #include <stdio.h> main() { struct { unsigned a:10; unsigned b:6; } bit,*pbit; 9.2.3 位段的引用 9.2 位段结构 bit.a=100; bit.b=20; printf("%d,%d\n",bit.a,bit.b); pbit=&bit; pbit->a=200; pbit->b=40; printf("%d,%d\n",bit.a,bit.b); } 程序执行结果如下: 100,20 200,40 9.2.3 位段的引用 9.3 小结 (1)位运算是C语言的一种特殊运算功能,是以二进制位为单位进行运算的。 (2)利用位运算可以完成汇编语言的某些功能。例如,按位与的作用有使位清零、取一个数中某些指定位、保留某一数位;异或运算的功能有使特定位翻转、不需用临时变量交换两个值。 9.3 小结 (3)位段在本质上也是结构体类型,不过其成员按二进制位分配内存。位段的定义、声明及使用的方式都与结构体相同。 北京科海电子出版社 · <<< 北京科海电子出版社 · <<< 北京科海电子出版社 · <<< Chapter 9结构体和共用体 9.1 位运算符和位运算 表9.1列出了C语言的位运算符。 以上位运算符中除“~”以外,均为双目运算符,即要求两侧各有一个运算对象。 9.1.1 位运算符 9.1 位运算符和位运算 1. “按位求反”运算(~) “~”是一个单目运算符,用来对一个二进制数按位求反,即将0变为1,1变为0。例如,~025是对八进制数25(即二进制按位求反。 9.1.2 位运算符的运算功能 9.1 位运算符和位运算 即八进制数25按位求反后的结果是八进制数177752,也就是说,~025的值为八进制数177752,并非-025。 9.1.2 位运算符的运算功能 9.1 位运算符和位运算 2. “左移”运算(<<) 左移运算符是双目运算符,用来将一个数的所有二进位全部左移若
您可能关注的文档
- ContractorSafetyTarining(WorkingAtHeight高空作业培训)汇总.ppt
- C反应蛋白(嘉兴)汇总.ppt
- C反应蛋白测定试剂盒注册技术审查指导原则(2016年修订版)汇总.doc
- C语言课程设计图书管理系统汇总.doc
- C语言字符串操作总结大全(超详细)汇总.doc
- D11_6高斯公式汇总.ppt
- Cooking菜单设计汇总.ppt
- COPD病人的护理查房汇总.ppt
- DBQ断相保护器测试台的搭建和改造(新)汇总.doc
- DBS45018-2015食品安全地方标准龟苓膏汇总.doc
- 重庆市黔江区沙坝镇社区工作者考试试题汇总2024.docx
- 重庆市黔江区黑溪镇社区工作者考试试题汇总2024.docx
- 重庆市合川区三庙镇社区工作者考试试题汇总2024.docx
- 重庆市巴南区安澜镇社区工作者考试试题汇总2024.docx
- 重庆市江津区支坪镇社区工作者考试试题汇总2024.docx
- 重庆市黔江区石会镇社区工作者考试试题汇总2024.docx
- 重庆市黔江区马喇镇社区工作者考试试题汇总2024.docx
- 重庆市江津区慈云镇社区工作者考试试题汇总2024.docx
- 重庆市江津区石蟆镇社区工作者考试试题汇总2024.docx
- 2023年-2024年初级经济师之初级经济师基础知识全真模拟考试试卷A卷含精品1879.pdf
文档评论(0)