C语言程序设计(第三版) 教学课件 作者 恰汗.合孜尔 第10章 位运算.pptVIP

C语言程序设计(第三版) 教学课件 作者 恰汗.合孜尔 第10章 位运算.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如,在存放一个开关量时,只有0和1两种状态,用一位二进制位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位段”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。 10.2.1 位段的概念 10.2 位段结构 1. 位段结构的定义和位段变量的说明 C语言中没有专门的位段类型,位段的定义要借助于结构体,即以二进制位为单位定义结构体成员所占存储空间,从而就可以按“位”来访问结构体中的成员。位段结构的定义与结构体定义相仿,其一般形式为: struct 位段结构名 { 类型说明符 位段名:位段长度 }; 10.2.2 位段结构的定义和使用 10.2 位段结构 而位段变量的说明与结构变量说明的方式相同。可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如,下面方式为同时定义说明: struct bs { int a:8; int b:2; int c:6; }data; 定义了一个位段结构类型bs,包含3个位段成员,其中位段a占8位,位段b占2位,位段c占6位,同时说明data为bs变量,共占两个字节。由此可以看出,位段在本质上就是一种结构类型,不过其成员是按二进位分配的。 10.2 位段结构 2. 位段的引用和赋值 与结构体成员的引用相同,其一般形式为: 位段变量名.位域名 例如,对于上述位段变量data,data.a、data.c分别表示引用变量data中的位段a、c。 位段可以在定义的同时赋初值,形式与结构体变量赋初值相同。位段也可以进行赋值操作,例如: data.a=1; data.b=4; data.c=6; 但是,赋值时应注意位段的取值范围,例如: data.c=2; 就会产生错误的结果。因为data.c只占1位,只能取值0或1。对于赋值语句:data.c=2; 系统并不报错,而是自动截取所赋值的低位:2的二进制码是10,取低一位为0。所以data.c的值为0。 10.2 位段结构 3. 使用位段的注意事项 ① 位段成员的类型必须是unsigned或int类型。 ② 每个位段不能超过一个字长(int的长度)。 ③ 位段不能跨越两个字。 ④ 在位段结构类型中,可以说明无名位段,这种无名位段具有位段之间的分隔作用。例如: struct bs { int x:1; int :2; int y:3; }; 其中第2个位段是无名位段,占2位,在位段x和y之间起分隔作用。无名位段所占用的空间不起作用。如果无名位段的长度为0,则表示下一个位段从一个新的字节开始存放。 ⑤ 位段成员可以在数值表达式中被引用,系统自动将其转换为相应的整数。 ⑥ 位段不能声明为数组,也不能用指针指向位段,不能对位段求地址。 10.2 位段结构 例 10.9 位段使用演示。 #include stdio.h void main() { struct bs /* 定义位段结构体类型bs */ { unsigned a:2; unsigned b:6; unsigned c:4; int i; }; struct bs data; /* 定义bs类型的变量data */ data.a=1; /* 对位段a赋值 */ data.b=7; /* 对位段b赋值 */ data.c=6; /* 对位段c赋值 */ data.i=1000; /* 对位段i赋值 */ printf(data.a=%d,data.b=%d,data.c=

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档