10-位运算 计算机程序设计(C语言)教学课件.pptVIP

10-位运算 计算机程序设计(C语言)教学课件.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文档。上传文档
查看更多
10-位运算 计算机程序设计(C语言)教学课件

中科大信息学院 中科大信息学院 中科大信息学院 中科大信息学院 中科大自动化系 中科大自动化系 中科大自动化系 中科大自动化系 * 中科大信息学院 * 第10章 位运算 位运算即二进制位(bit)的运算,一般是汇编实现的,但C语言提供这种运算。 10.2 位运算符 ~ 单目2级 按位取反 双目8级 按位与 ^ 双目9级 按位异或 | 双目10级 按位或 , 双目5级 按位左右移位 * 中科大信息学院 * 的用途 清零 取一个数中某些指定位。 例如,要取某个数a的低8位,计算a0377 1101,0001,0110,1010 a 0000,0000,1111,1111 0377 0110,1010 * 中科大信息学院 * | 的用途 将a的低8位置1,计算a|0377 1101,0001,0110,1010 a | 0000,0000,1111,1111 0377 1101,0001,1111,1111 * 中科大信息学院 * ^的用途 使特定位翻转 使a低4位翻转,计算a^017(习题3) 1101,0001,0110,1010 a ^ 0000,0000,0000,1111 017 1101,0001,0110,0101 与0相^,保留原值 012^00=012 交换两个变量值,不用临时变量(习题5) a=a^b; b=b^a; a=a^b; * 中科大信息学院 * ~的用途 例如,要使a的最右一位为0,可用 a=a0177776 上式a必须是16个比特,与机器有关。如果a是long,32比特存储,上式不能完成要求的功能。 a=a~1 与机器无关,具有通用性 * 中科大信息学院 * 运算符 双目运算符,如an,将a左移n个二进制位。移出的高位舍去,低位补0。 an 相当于a*2n a=2 0000,0000,0000,0010 a2 0000,0000,0000,1000 * 中科大信息学院 * 运算符 双目运算符,如a n,将a右移n个二进制位。移出的低位舍去,高位补0(补1)对于无符号数,高位补0。有符号数,有的系统补0,有的补1。 a n 相当于a÷2n a=8 0000,0000,0000,1000 a2 0000,0000,0000,0010 * 中科大信息学院 * 10.3 位段 位段也叫字位结构。 在应用程序中,有些变量用作标志,可能取值0或1,分配1比特即可。将这些用作标志的变量组合成字位结构,可节省内存空间。 定义位段变量 struct { unsigned a:2; unsigned b:3; unsigned c:4; }data; data.a=2; // data.a不大于3 data.c=15; // data.c不大于15 //给data.a赋值大于3,系统截去高位 * 中科大信息学院 * 关于位段说明 位段成员类型必须是unsigned 某一位段要从另一个字(一个int)开始 unsigned a:1; unsigned b:2; unsigned :0; unsigned c:3; 一个位段必须存储在同一存储单元 一个位段的长度不能大于一个存储单元的长度(一个int),也不能定义位段数组。 位段可以如同整型量操作。 a b c * 中科大信息学院 * 10.4 位运算举例 习题2.取a右数第4~7位。约定最右为低位从0开始。 unsigned a,b,c,d; scanf(%o,a); b=a4; //将4~7位移到最右端 c=~(~04); //作屏蔽尺,右端低4位全1 d=bc; printf(%o,%d\n%o,%d\n,a,a,d,d); unsigned a=0331; printf(“%o\n”,(a4)~(~04)); * 中科大信息学院 * 习题2.“ 取a的右数n位开始的m位 main() { unsigned a,n,m; scanf(“%o%d%d”,a,n,m); printf(“%o\n”,(an)~(~0m)); } * 中科大信息学院 * 习题4.将a右循环移n位,假设a为16比特 main() { unsigned a,b,c; int n; scanf(a=%o,n=%d,a,n); b=a(16-n); //b的高n位 = a的低n位 c=an; //c的低位 = a的高16-n位 c=c|b; printf(%o\n%o\n,a,c); } printf(%o,%o\n,a, an | a(16-n

文档评论(0)

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

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

1亿VIP精品文档

相关文档