欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    C语言程序设计课件位运算.ppt

    • 资源ID:2143081       资源大小:176.51KB        全文页数:34页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计课件位运算.ppt

    2019/2/21,位运算,课程:程序设计语言 教材:谭浩强C程序设计第三版 讲授:陈慧炜,2019/2/21,本章重点,6种基本位运算符的使用及其功能 位运算符的综合使用 位段的理解和应用,2019/2/21,请写出47的二进制形式,请写出-47的二进制数形式,提示: 1、在计算机中,数值一律以补码表示 2、绝对值相同的数,原码除符号位外都相同 3、正数的补码、原码、反码相同 4、负数的补码,是原码的反码加1,注意:最高位是符号位,1表示负数,0表示正数,整数的二进制表示,2019/2/21,整数的二进制表示,求负数-47的补码 原码: 反码: 补码:,2019/2/21,位与字节,高 低 一个字节由8个二进制位(bit)构成,一个位的取值为0或1。最右端的那一位是“最低位”,编号为0;最左端的那一位称为“最高位”,是符号位,从最低位到最高位按顺序依次编号。,2019/2/21,位运算符,1、按位与(&) 0&0=0,0&1=0,1&1=1 该位只要有一个0便为0 计算: 00000011 (3) & 00000101 (5),(-3) ? &(-5) ? ?,00000001 (1),2019/2/21,按位与的用途,(1)清零(用0相&) 11011001 & 11110000 11010000 (2)保留指定位(用1相&) 01010100 & 00111011 00010000 (3)用来检测某个位是否置位(用1相&),2019/2/21,例:有一数据b,想测试其第4位是否为1? 分析: 1.位号是从右向左数的 2. 设置一个只有第4位为1的二进制数a:00010000,与b进行与运 算,如果结果为00010000,则第4位为1;反之结果为00000000,则第4位为0。,2019/2/21,2、按位或(|),0|0=0,0|1=1,1|1=1 该位只要有一个1便为1 按位或的用途: (1)置位:用1去跟某些位或,使某些位为1,如: 11011001 | 00001111 11011111 (2)保留原位:用0去跟某些位或,如上例前4位,2019/2/21,3、异或(),00=0,01=1,11=0 异号为1(真),同号为0(假) 异或运算符的用途: (1)任何数与本身异或,则为0 10101111 10101111 00000000 (2)与0异或,则保留原值。 10101111 00000000 10101111,2019/2/21,(3)与-1异或,相当于将各位取反(因为-1的每个位都为1)。 10101111 11111111 (-1) 01010000 (4)特定位翻转。将需要翻转的位与1异或即可。 01111010 00001111 01110101,2019/2/21,(5)交换两个值,不用临时变量。 例:a=3,b=4,将a和b的值互换,可以用以下赋值语句实现: a=ab;b=ba;a=ab; a=011 b=100 a=111 b=100 b=011 a=111 a=100 最后,a=100 (4) b=011 (3) 实现了交换,2019/2/21,2019/2/21,4、取反(),0=1,1=0 举例:使16位整数a最低位为0 分析: a&1111111111111110 保留前15位,将最低位清零; 1111111111111110这个数值为多少,较难运算; 1111111111111110 =0000000000000001 0000000000000001的值较为简单,就是1; 所以可以用:a=a&1的表达式达到要求。,2019/2/21,5、左移运算符(),左移n位,右补n个0。 左移n位相当于乘以2n,左移位运算速度比乘法快。 但是,左移位可能溢出,实际结果不会超出指定的整数类型的值域。 unsigned char x = 37 3 ; 00100101 (37) 3 00101000 (40),2019/2/21,6、右移运算符(),右移n位相当于除以2 n,右移位运算速度比除法快。 00001111 2 00000011 注意: 无符号数:右移时左边补0; 有符号数:非负整数右移位时左边补0; 负整数逻辑右移:左边补0; 算术右移:左边补1,2019/2/21,检查一下你所用的计算机系统的C编译系统执行的是逻辑右移还是算术右移: 程序代码: #include void main( ) int a=0,b; b=a1; if(b=a)printf(“算术右移!n”); else printf(“逻辑右移!n”); 若b仍为0,则表明采用的是算术右移,反之为逻辑右移。,2019/2/21,位运算符功能总结,清位(置0):跟0(若非说明,指指定位的值)相& 置位(置1):跟1相| 检测某位是否为1:跟1相& 保留原位:跟1相&,或者跟0相| 翻转某位:跟1相,2019/2/21,位运算综合运用举例,例12.1:取一个整数a从右端开始的47位。,在中间取位比较麻烦,最好将该4位移到最低位,方便操作 a4即:,找一个数与(a4)进行运算,需要保留第四位,而使其余位清零,2019/2/21,设置一个最低四位均为1而其余位为0的数与之进行按位与运算,能够保留最低四位 0: 0000.00000 0: 111111111 04)跟(04)进行与运算,便可保留47位,2019/2/21,例12.2:右循环移位,假设用无符号短整型存放数据: a (16-n)位 n位 b n位 (16-n)位,2019/2/21,例12.2:右循环移位,假设用无符号短整型存放数据: a (16-n)位 n位 c,先取右端n位,放到最高位上: c=a(16-n);,2019/2/21,例12.2:右循环移位,假设用无符号短整型存放数据: a (16-n)位 n位 c d,然后取左端(16-n)位,放到低位: d=an,先取右端n位,放到最高位上: c=a(16-n);,2019/2/21,例12.2:右循环移位,假设用无符号短整型存放数据: a (16-n)位 n位 c d b n位 (16-n)位,然后取左端(16-n)位,放到低位: d=an,先取右端n位,放到最高位上: c=a(16-n);,b=c|d,2019/2/21,对于无符号整数,总长度N(8 16 32),则可以归纳为: 循环右移n: (an) |(a(N-n),2019/2/21,用二进制位存储信息: 将动词“看见”的这六种语法属性存入一个字节,则表示如下: 这个字节的值就是2163250。,2019/2/21,位 段,位段(bit field),就是结构(struct)中的一种字段(成员),这种成员是以二进制位作为长度单位的。动词属性可定义为如下一个结构: struct VerbAttr unsigned short Bu_ : 1 ; unsigned short Mei_ : 1 ; unsigned short Hen_ : 1 ; unsigned short _Zhe : 1 ; unsigned short _Le : 1 ; unsigned short _Guo : 1 ; v;,2019/2/21,结构中可以同时定义位段和其他字段。例如,重新定义动词属性结构如下: struct VerbAttr unsigned short Bu_ : 1 ; unsigned short Mei_ : 1 ; unsigned short Hen_ : 1 ; unsigned short _Zhe : 1 ; unsigned short _Le : 1 ; unsigned short _Guo : 1 ; char verb 9 ; v; 该结构的理论长度为1*2+1*9=11个字节,但为了对齐,垫补了一个字节,这时v的长度是12个字节。,2019/2/21,对位段中的数据引用的方法同样可以用成员运算符“.”和指向成员运算符“-”,如 v.Bu_ = 1 ; p-Hen_ = 0; 对位段进行赋值时需要注意其允许的最大值范围,如对结构 struct unsigned short a:2; unsigned short b:3; unsigned short c:4; int i; data; 写赋值语句 data.a=8 后,位段a 的值为多少?,2019/2/21,关于位段的说明,1、位段成员的类型必须指定为unsigned 或int 类型; 2、可定义长度为0的位段,使某一位段从另一个字开始存放,如下: struct unsigned short a: 1; unsigned short b: 2; unsigned short : 0; unsigned short c :3; data; data的长度是 几个字节?,2019/2/21,关于位段的说明,3、可定义无名位段,表明该几位空间不用: struct unsigned short a : 1; unsigned short : 1; / 无名位段,这两位空间不用 unsigned short b : 3; unsigned short c : 3; data;,2019/2/21,关于位段的说明,4、一个位段不能跨单元存储。如果第一个单元空间不能容纳下一个位段,则放弃该空间,而从下一个单元起存放该位段。 5、因为最小的存储单位是字节,所以不允许取位段的地址。 6、位段也只能在结构中定义,二进制位数组、返回二进制位的函数、二进制位的指针都是不允许的 7、位段可以用整型格式符输出。例如: printf(“%d,%d,%d”,data.a,data.b,data.c); 8、位段可以在数值表达式中引用,它会被系统自动地转换成整型数。,2019/2/21,总结:,如果特别看重程序的可移植性,还是应该尽量用位运算符来处理二进制位; 如果强调使用方便和源程序的可读性,位段也是一种不错的选择。,2019/2/21,思考与练习,105|78=? 105|78=? C语言标准输出函数只能将一个整数以10、8、16进制输出,没有2进制输出格式。要求编写程序,使键盘输入的正整数按二进制位输出。,

    注意事项

    本文(C语言程序设计课件位运算.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开