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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* (0177417)8称为“屏蔽字”,即把c以外的信息屏蔽起来不受影响,只使c变为0,但(0177417)8很难记,为此改为如下 data=data ~(154) data=data(0177417)8 相当于: 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 15 154 ~(154) * 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

文档评论(0)

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

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

1亿VIP精品文档

相关文档