第的十六次课(位运算).ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第的十六次课(位运算)

* data=data ~(154) |124 将12赋给c 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 15 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 n 首先取n右端4位的值 n15 如果想将n右端4位的值赋予c 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 n15 0 0 0 0 data ~(154) a b c d * data=data~(154)|(n15)4 与c中已清零的data按位或 左移4位 (n15)4 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 data ~(154) a b c d 1 0 1 0 a b c d * (2)位段(位域) 位段:c语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或“”位域”(bit field)。这样可以节省存储空间。 位段的定义和位域变量的说明 struct 位域结构名 { 位域列表 }; 其中位域列表的形式为: 类型说明符 位域名:位域长度; * 位域变量的说明与结构变量说明的方式相同。 可采用先定义后说明,同时定义说明或者直接说明这三种方式。 struct bs {int a:8; int b:2; int c:6; }; struct bs data; struct bs {int a:8; int b:2; int c:6; }data; data a b c * 位段中数据的引用 位段的使用和结构体成员的使用相同,一般形式为 位段变量名· 位段名 data.a=124 data.b=2 data.c=33 注意位段允许的最大范围。下面是错的: data.b=8 由于8的二进制为1000,而data.b只有两位,在此情况下,取1000的低2位,故data.b的值为0 位域允许用各种格式输出。 * main() {struct bs {unsigned a:1; unsigned b:3; unsigned c:4; } bit,*pbit; bit.a=1; bit.b=7; bit.c=15; printf(%d,%d,%d\n,bit.a,bit.b,bit.c); pbit=bit; pbit-a=0; pbit-b=3; pbit-c|=1; printf(%d,%d,%d\n,pbit-a,pbit-b,pbit-c); } * main() {struct bs {unsigned a:1; unsigned b:3; unsigned c:4; } bit,*pbit; bit.a=1; bit.b=7; bit.c=15; printf(%d,%d,%d\n,bit.a,bit.b,bit.c); pbit=bit; pbit-a=0; pbit-b=3; pbit-c|=1; printf(%d,%d,%d\n,pbit-a,pbit-b,pbit-c); } 例 * 说明 2)一个位段必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位段时,应从下一单元起存放该位段。也可以有意使某位段从下一单元开始。例如: struct bs {unsigned a:4 unsigned :0 /*空域*/ unsigned b:4 /*从下一单元开始存放*/ unsigned c:4 } 1)位段成员的类型必须指定为unsigned或int类型 * 3)由于位段不允许跨两个字节,因此位段的长度不能大于一个字节的长度,也就是说不能超过8位二进位。不能定义位段数组。 4)位段可以无位段名,这时它只用来作填充或调整位置。无名的位段是不能使用的。例如: struct k {int a:1 int :2 /*该2位不能使用*/ int b:3 int c:2 }; * 5)位段可以用整型格式输出,也可用%u、%o、%x等各式输出 6)位段可以在数值表达式中引用,它会被系统自动地转换成整型数。如下是对的 printf(“%d,%d,%d”, data.a, data.b, data.c); data.a+5/data.b * 本章小结 1.???? 位运算是C语言的一种特殊运算功能,它是以二进制

文档评论(0)

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

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

1亿VIP精品文档

相关文档