第2版电子课件office2003版C语言第2版第11章位运算2003版(230KB).pptVIP

第2版电子课件office2003版C语言第2版第11章位运算2003版(230KB).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文档。上传文档
查看更多
位异或运算 按位异或运算的作用是,判断两个数据对应位上的值是否“相异”(不同),若相异,则结果为1,否则为0。具体有: 0^0==0 0^1==1 1^0==1 1^1==0 异或运算符可用于“翻转”某位的值,也就是使0翻转为1,使1翻转为0。这是因为1与1进行异或运算结果为0,而1^0又成为1。如果想翻转一个变量的某一位,就使该变量与一个该位为1其余位全置0的数进行异或运算。例如,若想使b的第4位翻转,就应使a的第4位为1其余各位为0,a^b的运算结果中第4位改变了(起始位为第0位),而其余各位不变。 a=0 0 0 1 0 0 0 0 (16进制10) (^) b=0 0 1 1 0 1 0 1 (16进制35) ────────────────── a^b=0 0 1 0 0 1 0 1 (16进制25) ↑ 此位翻转 利用异或运算不仅可以翻转数据的某一个位,而且可以实现若干位的“翻转”。 如果使y二次与x进行异或运算,则其值仍为原值,即y^x^y==y。 异或运算可以完成的功能: 1 将变量指定位的值取反 如unsigned int a=841,对低8位二进制值取反,则只要将它和255进行异或即可。 2 交换两个变量的值。 a=a^b; b=b^a; a=a^b; 这样就完成了a,b两个变量值的交换 请阅读程序example11-6.c 程序范例 1 从IP中分离网络ID和主机ID 请阅读程序example11-7.c 2 设计程序计算number*2pow 请阅读程序example11-8.c 我们知道,计算机真正执行的是由0和1信号组成的机器指令,数据也是以二进制表示的。因此最终要实现计算机的操作,就是要对这些0和1信号进行操作。每一个0和1的状态称为一个“位”(bit)的状态。C语言中这种对字节和位的操作就称为位操作或位运算。 对整型或字符型数据来说,C语言具有直接操作其字节或位的能力。C语言同汇编语言相比,虽然位操作运算没有后者那么丰富,但它可以实现大部分常用的位运算,比如按位取反、数据的左移或右移,等等,这对程序的编制还是相当灵活和方便的。 位运算符中有单目和双目两种,其中取反是单目运算,其它均为双目运算。 这里我们按整型变量为2字节来讲授。 位运算和赋值运算的结合 按位取反运算符 “~”是一个单目运算符,运算量写在运算符之后。取反运算符的作用是使一个数据中所有二进制位都取其反值(即0变1,1变0)。例如: a= 0 0 0 0 0 0 1 1 (16进制数03) ~a= 1 1 1 1 1 1 0 0 (16进制数fc) int i=85; printf(“~i=%d\n”,~i); 结果为 ~i=-86 分析: (85)10= (0000000001010101)2 取反后为(1111111110101010)2 最高位为1意味着是个负数的补码,是反码加1的结果,除最高位再取反,得到原码 1000 0000 0101 0110 即-86 unsigned int i=85; printf(“~i=%u \n”,~i); 结果为:~i=65450 分析:这里i按位取反后的结果(1111111110101010)2是个无符号的整数,为正数,可以得到这个数为十进制的65450. 如果需要位运算操作时,一般把变量定义为无符号类型,以免产生多种问题。 阅读程序example11_1.c 按位左移运算 左移运算符是“”,左移的含义是,将一个数据中的各个位全部左移若干位。形式为:mn 【例11.7】“x2”表示将x中各位左移2位,如果字符x的值为十六进制数85,左移2位后得14,左移后移出的两位丢失,右边空出来的位置补零。运算情况如下: unsigned int m=65; printf(“m2=%u \n”,m2); 结果为: m2=260 分析: 对比: int n=-65; printf(“n1=%u \n”,n1); 结果为:n1=-130 这里是个有符号整数的左移,符号位虽然是最高位,但左移不能舍弃,必须保留,右边按正常情况补入0. 可用左移运算实现乘法运算。在对机器操作的过程中,一个数据左移1位相当于该数据乘2,左移2位相当于乘4。由于左移运算比乘法运算要快得多,有些C编译系统会自动将乘2的操作通过左移1次来实现,将乘2n的幂运算用左移n位来实现

文档评论(0)

精品课件 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档