网站大量收购独家精品文档,联系QQ:2885784924

C语言内涵教程周二强著第12章节位运算.ppt

C语言内涵教程周二强著第12章节位运算.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言内涵教程 周二强 zeq126@126.com 中国铁道出版社 ISBN9787113163815 第12章 位运算 12.1 位操作符 12.2 位运算示例 12.3 位段 12.1.1 按位与操作符 按位与操作符将参与运算的两个操作数以二进制位为单位进行“与”运算。与运算时,如果两个二进制位上的数均为1,则运算结果的此位为1;否则,运算结果的此位为0。 例如:char a = -2, b = 3,则a b的值为2。 按位与操作符的特点 从按位与操作符的运算规则可知,利用按位与操作符可以在不影响其它位的情况下将整数的某位设置为0。 设无符号字符型c的值为165(1010 0101),即现在是第0、2、5、7号灯亮,需熄灭7号灯时,只要让c与0x7f(0111 1111)进行按位与运算即可。c = c 0x7f 按位或操作符| 按位或操作符|将参与运算的两个操作数以二进制位为单位进行“或”运算。或运算时,如果两个二进制位上的数都为0,则运算结果的此位为0;否则,此位为1。 由运算规则可知,利用按位或操作符|可以在不影响其它位的情况下将一个整数的某位设置为1。设无符号字符型c的值为165,需打开1号灯时,只要让c与0x2进行按位或运算即可。c |= 0x2 12.1.3 异或操作符^ 异或操作符^也称xor操作符。异或操作符^将参与运算的两个操作数以二进制位为单位进行“异或”运算。 “异或”运算可理解为“判断是否不同(为异)”的运算。异或运算时,如果两个二进制位上的数相同,则运算结果的此位为0(表示否,不为异);如果两个二进制位上的数不同,则运算结果的此位为1(表示是,为异)。 异或操作符^的特点 分析运算规则可知,某位与1进行异或运算时,结果与该位正好相反(翻转),即原来是1时结果为0,原来是0时结果为1;某位与0进行异或时,结果与该位相同。 设无符号字符型c的值为165,需要改变0号到3号灯的状态(即亮的灭,灭的亮)时,只要让c与0xf进行异或运算即可。c ^= 0xf 12.1.4 取反操作符~ 取反操作符是一个单目操作符,用来对一个整数按二进制位取反。按位取反时,原来是1的结果为0,原来是0的结果为1。 设无符号字符型c的值为165,需要改变所有灯的状态时,只要进行取反运算即可,即c = ~c。 ~a等价于-1-a,故~a+1的值为-1-a+1,即-a。 12.1.5 左移操作符 左移操作符的常用形式为:a n 其中,a和n均为整数,求值时a的二进制位全部左移n位,右端补n个0,舍弃左端移出的n位。显然n的取值范围通常为1至sizeof(a)。 在位运算中,左移操作符常用于构造操作数。 无符号字符型变量c的值为165,需点亮第6号灯,可以用如下表达式c |= 1 6模拟,其中,1 6即0100 0000。 左移操作符 左移操作也可看作算术运算,a左移1位的值为a的2倍,左移2位的值为a的4倍,……。计算a1要比计算a*2快得多。 左移操作符的优先级低于算术操作符但高于关系操作符。单目操作符~的优先级较高。按位与、按位或和按位异或的优先级低于关系操作符,但高于逻辑操作符。 12.1.6 右移操作符 右移操作符与左移操作符类似,表达式a n求值时,会将a的二进制位全部右移n位,右端移出的n位被舍弃。根据左端移入数的不同,右移操作分为“逻辑右移”和“算术右移”两种。逻辑右移时,无论a为何类型,左端均移入n个0;算术右移时,如果a为非负数,则左端移入n个0;如果a为负数,则左端移入n个1。C语言编译器多采用算术右移。 例12-1 分析下面求整数绝对值的函数 如果x=0,则y的值为0,(x ^ y) - y 的结果仍为x。 如果x0,则y的值为-1, x与-1进行异或运算实际 上是对x进行取反操作, 再减y就是再加1,也就是说, 表达式(x ^ y) - y等于~x+1,即-x。 12.2 位运算示例 例12-2 用无符号字符型变量模拟控制0号灯到7号灯的开关,变量中的每一位都对应一盏灯,当某位为1时相应的灯亮,为0时相应的灯灭。 随机生成20个0~7的整数,根据整数调整相关灯的明灭。如果随机生成的整数为5,则5号灯亮时关掉,灭时打开。最初八盏灯均不亮,编程输出20次操作后八盏灯的状态。 分析:用异或操作改变某位的状态以控制相关灯的明灭,使用左移操作构造操作数。 例12-3 把一个整数32位中的高16位和低16位互换。 12.3 位段 C语言允许在一个结构型中以位为单位指定其成员实际存储空间的长度,结构型中指定了存储长度的成员就是所谓的位段。 结构型struct bitfield虽然有三个内部成员a,b,c,但它们存储空间的长度只有2位、4位和2位。内部成员a、b、c虽然位数不多,但仍

文档评论(0)

精品课件 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档