电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

C语言程序设计(第二版) 教学课件 ppt 作者 978-7-302-32355-6 kj-第11章位运算

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

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

C语言程序设计(第二版) 教学课件 ppt 作者 978-7-302-32355-6 kj-第11章位运算

第1页,第11章 位运算,本章概述 本章的学习目标 主要内容,第2页,本章概述,C语言有一个重要特点就是可以直接对二进制位进行操作,即位运算。 二进制位简称位(bit),其值为0或1。计算机真正执行的正是由0和1构成的机器指令,计算机内数据也是由二进制表示的。 数在计算机内均是以补码的形式存储的 。 本章介绍位运算和位段结构的有关知识。,第3页,本章的学习目标,本章教学目的:理解位运算的概念,掌握基本位运算运算符的使用,理解位段的概念。 本章教学重点:基本位运算运算符的使用 本章教学难点:位段的概念,第4页,主要内容,11.1 位运算符 11.2 位运算 11.3 位运算应用举例 11.4 位段结构,第5页,11.1 位运算符,第6页,11.2 位运算,取反运算“”是一个单目运算符,运算量在运算符之后,取反运算的功能是将一个数据中所有位都取其相反值,即1变0,0变1。 运算规则为: 1=0 0=1,例11.1 对于无符号的字符型数据 a=(18)10 =(00010010)2 , 则a等于(11101101)2 ,即(237)10 。 C程序如下:,11.2.1 按位取反运算,第7页,# include int main() unsigned char a=18,b; b=a; printf(“a=%d”,b); return 0; 运行结果为: a= 237,注意以下程序与左面程序及运行结果的区别: # include int main() char a=18,b; b=a; printf(“a=%d”,b); return 0; 运行结果:-19,前一个程序结果很好理解,后一个因为a是带符号数据,因此a=(11101101)2的结果是一负数的补码,转换为原码时,第1位符号位不变,对剩余的部分先减1,再全部取反,因此得到的二进制原码为:10010011,即十进制的-19。,第8页,11.2 位运算,11.2.2 左移运算,左移运算“”是一个双目运算符,左移运算的功能是将一个数据所有位向左移若干位,左边(高位)移出的部分舍去,右边(低位)自动补零。,例11.2 对于无符号字符型数据 a=(18)10 =(00010010)2 , a 3的结果是(10010000)2 ,即(144)10 。 C程序如下:,第9页,# include int main() unsigned char a=18, b; b=a3; printf(“a3=%d”,b); 运行结果为: a3=144,注意以下程序与左面程序的区别: # include int main() char a=18,b; b=a3; printf(“a3=%d”,b); return 0; 运行结果为: a3=-112,原因同前,对于带符号数a,因a3得到的(10010000)2, 是一负数的补码,转换为原码时,第1位符号位不变,对剩余的部分先减1,再全部取反,因此得到的二进制原码为:11110000,即十进制的-112。 对于无符号数来说,在左移的过程中如果没有高位的丢失,左移1位相当于乘2,左移2位相当于乘4。 左移运算速度较快,因此有些C编译系统自动将乘2的操作用左移1位来实现,将2n幂运算用左移n位来实现。,第10页,11.2 位运算,11.2.3 右移运算,右移运算“”是一个双目运算符,右移运算的功能是将一个数据所有位向右移若干位,右边(低位)移出的部分舍去,左边(高位)移入的二进制数分两种情况:对于无符号数和正整数,高位补0;对于负整数,高位补1(适用于turboc系统)。,例11.3 对于无符号字符型数据 a=(18)10 =(00010010)2 , 则 a 3的结果是(00000010)2,即(2)10 。,第11页,C程序如下: # include int main() unsigned char a=18, b; b=a3; printf(“a3=%d”,b); return 0; 运行结果为: a3=2,第12页,11.2 位运算,11.2.4 按位与运算,按位“与”运算符要求有两个运算量,其功能是将两个运算量的各个相应位分别进行“与”运算。 运算规则为: 1&1=1 0&1=0 1&0=0 0&0=0,例11.4 对于无符号数a=(173)10=(10101101)2, b=(203)10=(11001011)2, 则a&b = (10001001)2 =(137)10,10101101 & 11001011 10001001,第13页,例11.5 对于有符号数a=(-83)10=(10101101)2 , b=(-53)10=(11001011)2 , 则a&b = (10001001)2 =(-119)10 。 以上二进制形式是负数的补码。C程序如右上所示。,C程序如下: # include int main() unsigned char a=173,b=203,c; c=a 运行结果为: a&b=137,10101101 & 11001011 10001001,C程序: # include int main() char a=-83,b=-53,c; c=a 运行结果为: a&b=-119,第14页,11.2 位运算,11.2.5 按位或运算,按位“或”运算符要求有两个运算量,其功能是将两个运算量的各个相应位分别进行“或”运算。 运算规则为: 1|1=1 0|1=1 1|0=1 0|0=0,例11.6 对于无符号数a=(173)10=(10101101)2,b=(203)10=(11001011)2,则a|b = (11101111)2 =(239)10 。,10101101 | 11001011 11101111,第15页,例11.7 对于有符号数 a=(-83)10=(10101101)2, b=(-53)10=(11001011)2, 则a|b = (11101111)2 =(-17)10 。,C程序如下: # include int main() unsigned char a=173,b=203,c; c=a|b; printf(“a|b=%d”,c); return 0; 运行结果: a|b=239,10101101 | 11001011 11101111,第16页,C程序如下: # include int main() char a=-83,b=-53,c; c=a|b; printf(“a|b=%d”,c); return 0; 运行结果为: a|b= -17,第17页,11.2 位运算,11.2.6 按位异或运算,按位“异或”运算符要求有两个运算量,其功能是将两个运算量的各个相应位分别进行“异或”运算。 运算规则为: 11=0 01=1 10=1 00=0 。,例11.8 对于无符号数 a=(173)10=(10101101)2, b=(203)10=(11001011)2, 则ab = (01101110)2 =(102)10 。,10101101 11001011 01100110,C程序如下: # include int main() unsigned char a=173,b=203,c; c=ab; printf(“ab=%d”,c); return 0; 运行结果: ab=102,第18页,11.3 位运算应用举例,例11.9 对内存中的二进制数“01010100”进行下列操作: 1. 用“按位与”实现: (1)把存储此二进制数的内存单元清零; (2)把此二进制数的2到4位取出(从0位开始); (3)把此二进制数的2、3、5位留下。 2. 用“按位或”运算把此二进制数后四位置1 (写出实现方法) 。,第19页,(3)要把二进制数2、3、5位留下, 与00101100进行按位与即可, 其运算过程为: 01010100 & 00101100 00000100 2.把此二进制数后四位置1, 与00001111进行按位或即可, 其运算过程为: 01010100 | 00001111 01011111,1.用按位与实现: (1) 要把存储此二进制数的内存 单元清零,与0按位与即可, 其运算过程为: 01010100 & 00000000 00000000 (2)要取出二进制数2到4位, 与00011100进行按位与即可, 其运算过程为: 01010100 & 00011100 00010100,第20页,例11.10 编程将一个十六进制整型数转换为二进制数。 设该整型数占16位。,将十六进制数转换为二进制数的方法很多,这里我们利用位运算来进行处理,思路:对一个十六进制整型数n的二进制(16位)形式从最高位到最低位的每一位进行测试,依次求出其值即可。 具体方法:设置一个屏蔽字mask(二进制为1000 0000 0000 0000。其相应的十六进制形式为0x8000),将mask与n进行“与”运算得出的值如为0则最高位为0,否则最高位为1;再将mask右移一位后,与n进行“与”运算得出次高位,依此类推,求出每一位的值。,第21页,# include int main() unsigned int i,n,b,mask; mask=0x8000; printf(“Input a hex number to convert:“); scanf(“%x“, ,运行情况: Input a hex number to convert: f f Binary of f f is: 00000000-11111111 Input a hex number to convert: 127 Binary of 127 is:00000001-00100111,第22页,例11.11 循环移位。 所谓循环移位是指:在移位时不丢失移位前原数据的所有位,将其作为另一端的补入位。 如:将11110001循环右移1位,应为11111000。 11110001循环右移3位,应为00111110。,第23页,实现将无符号数a循环右移n位的方法: (1) 将a左移16-n位存入b中; (2) 将a右移n位存入c中; (3) 将b与c按位进行“或运算”,则结果便为所需结果。,第24页,# include int main() unsigned int n,a,b,c,d; printf(“Input a Hex number:“); scanf(“%x“, ,运行情况: Input a Hex number:f2d3 Input the number of bit to move:3 The result of move:7e5a,第25页,11.4 位段结构,1. 位段结构的概念,位段结构是一种结构体类型,只不过是在结构体中含有以位为单位定义存储长度的成员。采用这种结构可以节省存储空间、方便某些特定的操作。,2 . 位段结构的定义,struct bytedata unsigned a : 2 ; /*占2位*/ unsigned b : 1 ; /*占1位*/ unsigned C: 3 ; /*占3位*/ unsigned d : 2 ; /*占2位*/ ,位段结构中位段的定义: unsigned :,例如,第26页,其存储结构如下图:,struct bytedata unsigned a : 2 ; /*占2位*/ unsigned b : 1 ; /*占1位*/ unsigned : 3 ; /*占3位,无字段名,不能引用*/ unsigned d : 2 ; /*占2位*/ ,如果需要可以跳过某些不用的位,只要将这些位段不指定位段名就无法引用。例如:,第27页,如果某一位段为位数为0的无名位段,则表示其

注意事项

本文(C语言程序设计(第二版) 教学课件 ppt 作者 978-7-302-32355-6 kj-第11章位运算)为本站会员(E****)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

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




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.