电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

29页
  • 卖家[上传人]:E****
  • 文档编号:89345554
  • 上传时间:2019-05-23
  • 文档格式:PPT
  • 文档大小:187.50KB
  • / 29 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、第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页,

      2、# 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() unsign

      3、ed 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.

      4、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程序

      5、如右上所示。,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程序如下: # in

      6、clude 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=

      7、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 & 00

      8、011100 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

      9、 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****分享,可在线阅读,更多相关《C语言程序设计(第二版) 教学课件 ppt 作者 978-7-302-32355-6 kj-第11章位运算》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.