清华谭浩强C语言课件教学PT第12章 位运算.pptVIP

清华谭浩强C语言课件教学PT第12章 位运算.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文档。上传文档
查看更多
清华谭浩强C语言课件教学PT第12章 位运算

第十二章 位运算及其应用 1、按位与运算符(): 1)运算规则: 00=0 10=0 01=0 11=1 ▲只要对应位上的值均为1则该位上的结果值为1 2)特殊作用。 ①将一个存储单元各位清0 ②取某个数中的某些位。 ▲方法:将本数与某个特定数按位与运算即可。 2、按位或运算符(|) 1)运算规则: 0|0=0 1|0=1 0|1=1 1|1=1 ▲只要对应位上的值其中一个为1则该位上的结果值为1 2)特殊作用。 ①常用于将一个数的某些特定位置为1 ▲方法:将本数与某个特定数按位或运算即可。 3、按位异或运算符(^) 1)运算规则: 0^0=0 1^0=1 0^1=1 1^1=0 ▲只要对应位上的值互不相同则该位上的结果值为1 2)特殊作用[p300]。 ①使某些特定的翻转 ②任何数与0相异或结果保留原数本身 ③交换两个变量的值不用中间变量。 a=a^b b=b^a a=a^b ▲注意给变量赋值的先后顺序。 4、按位异求反运算符(~) 1)运算规则: ~0=1 ~1=0 ▲对每个上的值按位求反:1变为0;0变为1。 ▲注意以上位逻辑运算的优先级别。 ▲注意:~运算符比算术运算、关系运算、逻辑运算和其它运算的优先级别都高。 三、位移运算[符]: 和 1、左位移运算符(): 1)运算规则: a=an 将a中所有位向左移动n位。 2)运算的作用:相当于乘法运算。左移一位相当于乘以2。 ▲高位[左边位]左移后溢出被舍弃,不起作用。低位补以0。 位移运算及其作用[右位移运算()] 1)运算规则: a=an 将a中所有位向右移动n位。 2)运算的作用:相当于除法运算。右移一位相当于除以2。 【注意】注意数的符号问题[即正负的问题] ▲对于无符号数[正数]右移时高位补以0。 ▲对于有符号数,高位为0[正数]右移时高位补以0。 ▲对于有符号数,高位为1[负数]时: ①右移时高位补以0,称之为“逻辑位移”。 ②右移时高位补以1,称之为“算术位移”。 ▲TC采用“算术位移”,高位补以1。 左位移运算符()                * 一、位运算的分类: 位逻辑运算、位移运算两种 二、位逻辑运算[符]: | ^ ~ 【位逻辑运算的特点】 ▲只作用于整型、字符型数据; ▲作用于整型、字符型数据的每个二进制位,不是数的整体 ▲而一般逻辑运算是作用数的整体,不是数的每个二进制位。运算结果是二进制数。 12.1.7 位运算赋值运算符 位运算符与赋值运算符可以组成复合赋值运算符如:=, |=, =, =, ∧= 例如,a = b相当于 a = a b。a =2相当于:a = a 2。 12.1.8 不同长度的数据进行位运算 如果两个数据长度不同(例如long型和int型)进行位运算时(如a b,而a为long型,b为int型),系统会将二者按右端对齐。如果b为正数,则左侧16位补满0。若b为负数,左端应补满1。如果b为无符号整数型,则左侧添满0。 12.2 位运算举例 例 12.1取一个整数a从右端开始的4~7位。 可以这样考虑: ① 先使a右移4位。见图12.3。图12.3(a)是未右移时的情况,(b)图是右移4位后的情况。目的是使要  取出的那几位移到最右端。 图12.3 右移到右端可以用下面方法实现: a 4 ② 设置一个低4位全为1,其余全为0的数。可用下面方法实现: ~ ( ~ 0 4 ) ~0的全部二进制为全1,左移4位,这样右端低4位为0。见下面所示: 0:0000…000000 ~0: 1111…111111 ~04:1111…110000 ~(~04):0000…001111 ③ 将上面二者进行运算。即 (a 4) ~ ( ~ 0 4 )   根据上一节介绍的方法,与低4位为1的数进行运算,就能将这4位保留下来。   程序如下: main( )    {unsigned a,b,c,d; scanf(%o,a); b=a>>4; c=~(~0<<4); d=bc; printf(%o, %d\n%o, %d\n,a,a,d,d); }   运行情况如下: 331   331, 217(a的值)    15, 13 (

文档评论(0)

fangsheke66 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档