C语言程序设计教程 葛素娟 第十一章 位运算新.pptVIP

C语言程序设计教程 葛素娟 第十一章 位运算新.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章 位运算 一、位运算的概念 二、位运算符 三、位运算的常用用法 四、位运算复合赋值运算符 五、位段 二、位运算符 三、位运算的常用用法 四、位运算复合赋值运算符 * * 前面所学习的所有运算都是对某个变量所进行的操作,其实C语言还可以对变量中的个别位进行操作。尤其是使用C语言编写设备驱动程序、嵌入式程序的时候,某个变量的每一位都会有特定的含义。本章将介绍C语言中的位运算。 一、位运算的概念 日常生活中常用十进制的数据描述事物。但是,对计算机的硬件来说,一个物理器件一般有两个明显的稳定状态,例如:电路的开、关状态;电平的高、低状态;磁盘上某个点的顺磁、逆磁状态;光盘上某个点的平、凹状态等。所以,计算机世界是一个二进制的0、1世界,每个0或1是一个位。8个位组成一个字节。 在VC编译系统中,一个int型变量占4个字节,也就是32位的存储单元。位运算可以对32个位中的任意一位进行运算。 例如:int a; a=4; 如图所示。 在C语言中,提供位逻辑运算符和移位运算符。 1、位逻辑运算符 C语言中位逻辑运算符有四种:按位与、按位或、按位异或、按位取反。 1)“按位与”运算符——“” 参加运算的两个数据,按二进位进行“与”运算。 运算规则是:00=0; 01=0; 10=0; 11=1; 【例11-1】35值是多少? #include stdio.h void main( ) { printf(%d\n,35); } 【例11-2】-3-5值是多少? #include stdio.h void main( ) { printf(%d\n,-3-5); } 2)“按位或”运算符——“|” 两个相应的二进位中只要有一个为1,该位的结果值为1。 运算规则是:0|0=0; 0|1=1; 1|0=1; 1|1=1; 【例11-3】060|017的值是多少?(八进制) #include stdio.h void main( ) { printf(%o\n,060|017); } 3)“按位异或”运算符 —— “∧” 参加运算的两个二进位同号,则结果为0(假);异号则为1(真)。 运算规则是:0∧0=0; 0∧1=1; 1∧0=1; 1∧1=0; 【例11-4】0x39∧0x2a的值是多少?(十六进制) #include stdio.h void main( ) { printf(%x\n,0x39^0x2a); } 4)“按位取反”运算符——“~” “~”是一个单目运算符,用来对一个二进制数按位取反,即将0变1,1变0。 【例11-5】~025的值是多少?(八进制) #include stdio.h void main( ) { printf(%o\n,~025); } 2、移位运算符 1)“左移”运算符——“<<” 用来将一个数的各二进位全部左移若干位,右补0。 【例11-6】若a=15; a=a2; 则a的值是多少? #include stdio.h void main( ) { int a=15; a=a2; printf(%d\n,a); } 说明: 1) 高位左移后溢出,舍弃不起作用。 2) 左移1位相当于该数乘以21,左移2位相当于该数乘以22,即左移n位相当于该数乘以2n。此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。 例如:假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64;时,左移一位时溢出的是“0”,相当于乘以21,值为128;而左移2位时,溢出的高位是“01”,值为0。如图所示。 3) 左移比乘法运算快得多,有些C编译系统自动将乘2的运算用左移一位来实现,将乘2n的幂运算处理为左移n位。 2)“右移”运算符 —— “>>” 移到右端的低位被舍弃。 【例11-7】若a=017; a=a2; 则a的值是多少? #include stdio.h void main( ) { int a=017; a=a2; printf(%o\n,a); } 说明: 1) 右移1位相当于除以21,右移2位相当于除以22,右移n位相当于除以2n。 2) 在右移时,需要注意符号位问题。对无符号数,右移时左边高位移入0。对于有符号的

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档