C语言程序设计_12.pptVIP

  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文档。上传文档
查看更多
第十二章 位运算 概述 位运算符 位运算举例 概述 C语言是为描述系统而设计的,因此它应当具有汇编语言所能完成的一些功能。C语言既具有高级语言的特点,又具有低级语言的功能,因而具有广泛的用途和很强的生命力。前面介绍的指针运算和本章将介绍的位运算就很适合于编写系统软件的需要。 所谓位运算是指进行二进制位的运算。在系统软件中,常要处理二进位的问题。例如,将一个存储单元中的各二进位左移或右移一位,两个数按位相加等。c语言提供位运算的功能,与其它高级语言(如PASCAL)相比,它显然具有很大的优越性。 前面我们介绍了有关位的知识,这一部分对 对二进制运算能有较好的理解,请复习 位运算符 表12.1 运算符 含义 按位与 | 按位或 ^ 按位异或 ~ 取反 左移 右移 ~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,1变0。 例如.~025是对八进制数25(即二进制数0000000000010101)按位求反。 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 即八进制数177752。因此,~025的值为八进制数177752,不要以为~025的值是-025。 若将C源程序移植到以32位存放一个整数的计算机系统上呢? 由于一个整数用4个字节(32位表示),想将最后一位变成0就不能用a&0177776了。 为了适应以32位存放一个整数的计算机系统,应改用 a&037777777776 这样改动使移植性差了,可以改用 a=a&~1 它对以16位和以32位存放一个整数的情况都适用,不必作修改。因为在以2个字节存储一个整数时 用来将一个数的各二进位全部左移若干位。例如 a=a<<2 将a的二进制数左移2位,右补0。若a=15,即二进制左移2位得00 11 11 00 ,即十进制数60。 高位左移后溢出,舍弃不起作用。 左移1位相当于该数乘以2,左移2位相当于该数乘以4。上面举的例子15<<2=60,即乘了4.但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。例如,假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64时,左移一位时溢出的是0,而左移2位时,溢出的高位中包含1。 可以看出,a=64左移1位时相当于乘2,左移2位后,值等于0。左移比乘法运算快得多,有些C编译程序自动将乘2的运算用左移一位来实现,将乘2n的幂运算处理为左移n位。 a>>2表示将a的各二进位右移2位。移到右端的低位被舍弃,对无符号数,高位补0。如a=017时: a为 , a 2为: 11 此二位舍弃 右移一位相当于除以2,右移n位相当于除以2n。 在右移时,需要注意符号位问题。对无符号数,右移时左边高位移入0。对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0,如同上例表示的那样。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的移入1。移入0称为“逻辑右移”,即简单右移。移入1的称为“算术右移”。例如,a的值为八进制数113755。 a:1001011111101101 a1 :0100101111110110 (逻辑右移时) a1:1100101111110110 (算术右移时) 在有些系统上,a>>1 得八进制数045766,而在另一些系统上可能得到的是145766。Turbo C和其它一些C编译采用的是算术位移,即对有符号数右移时,左面移入高位的是1 七、位运算符与赋值运算符结合可以组成扩展的赋值运算符 如: &=

文档评论(0)

考试教学资料 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档