第14章位运算-Read.PPT

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

教学内容: 14.1 位逻辑运算 14.2 位移位运算 14.3 复合位运算 14.4 位段 教学要求: 1.掌握按位与运算、按位或运算、按位异或运算、取反运算、左移运算、右移运算的运算规则。 2.掌握位段的应用。 例14.6从键盘上输入1个正整数给整型变量n,按二进制位输出该数。 #include stdio.h main() { int n, mask, i; printf(Input a integer number: ); scanf(%d,n); /*构造1个最高位为1、其余各位为0的整数(屏蔽字)*/ mask = 115; printf(%d= , n); for(i=1; i=16; i++) { putchar(nmask ? ’1’ : ‘0’); /*输出最高位的值(1/0)*/ n = 1; /*将次高位移到最高位上*/ if( i%4==0 ) putchar(‘,’); } /*四位一组,用逗号分开*/ printf(\bB\n); } 程序运行情况: Input a integer number:1000 ←┘ 1000=0000,0011,1110,1000B 1.复合位赋值运算符: 复合按位与赋值运算符 = 复合按位或赋值运算符 | = 复合按位异或赋值运算符 ^= 复合按位左移赋值运算符 = 复合按位右移赋值运算符 = 2. 复合位赋值运算规则 复合位赋值运算规则与复合算术赋值运算规则相同。 运算符 表达式 等价表达式 = x =m x=xm | = x | = m x=x | m ^= x ^ =m x=x^m = x=n x=xn = x=n x=xn 14.4 位 段 C语言引入位段类型。使得当存储1个信息只需二进制的若干位时,二进制的1个(或多个)位就够用,就可以不必占用1个字节。 如果仍然使用结构类型,则造成内存空间的浪费。为此,C语言引入了位段类型。 例如,CPU的状态寄存器,按位段类型定义如下: struct status { unsigned sign: 1; /*符号标志*/ unsigned zero: 1; /*零标志*/ unsigned carry: 1; /*进位标志*/ unsigned parity: 1; /*奇偶/溢出标志*/ unsigned half_carry: 1; /*半进位标志*/ unsigned negative: 1; /*减标志*/ } flags; 显然,对CPU的状态寄存器而言,使用位段类型(仅需1个字节),比使用结构类型(需要6个字节)节省了5个字节。 2.说明 (1)因为位段类型是一种结构类型,所以位段类型和位段变量的定义,以及对位段(即位段类型中的成员)的引用,均与结构类型和结构变量一样。 (2)对位段赋值时,要注意取置范围。一般地说,长度为n的位段,其取值范围是:0~(2n-1)。 (3)使用长度为0的无名位段,可使其后续位段从下1个字节开始存储。 例如, struct status { unsigned sign: 1; /*符号标志*/ unsigned zero: 1; /*零标志*/ unsigned carry: 1; /*进位标志*/ unsigned : 0; /*长度为0的无名位段*/ unsigned parity:

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档