C语言Chapter9结构体和共用体汇总.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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. “左移”运算(<<) 左移运算符是双目运算符,用来将一个数的所有二进位全部左移若

文档评论(0)

bbnm58850 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档