《C语言程序设计(第三版)》课件第10章 位运算.ppt

上传人(卖家):momomo 文档编号:7375498 上传时间:2023-12-12 格式:PPT 页数:20 大小:597KB
下载 相关 举报
《C语言程序设计(第三版)》课件第10章 位运算.ppt_第1页
第1页 / 共20页
《C语言程序设计(第三版)》课件第10章 位运算.ppt_第2页
第2页 / 共20页
《C语言程序设计(第三版)》课件第10章 位运算.ppt_第3页
第3页 / 共20页
《C语言程序设计(第三版)》课件第10章 位运算.ppt_第4页
第4页 / 共20页
《C语言程序设计(第三版)》课件第10章 位运算.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、l掌握基本位运算的形式掌握基本位运算的形式l掌握位运算的一般性计算方法掌握位运算的一般性计算方法 10.1 几个基本概念几个基本概念 l【问题问题】我们知道任何信息在计算机中都是以我们知道任何信息在计算机中都是以二进制形式表示,而我们日常生活中使用的是二进制形式表示,而我们日常生活中使用的是十进制,由于位运算是指进行二进制位的运算,十进制,由于位运算是指进行二进制位的运算,因此在学习位运算之前我们有必要了解与回顾因此在学习位运算之前我们有必要了解与回顾一下计算机内数据组织与存储形式。一下计算机内数据组织与存储形式。10.1.1 字节与位字节与位 l 字节字节(byte)是计算机中的存储单元。一

2、个字节)是计算机中的存储单元。一个字节可以存放一个英文字母或符号,一个汉字通常要可以存放一个英文字母或符号,一个汉字通常要用两个字节来存储。每一个字节都有自己的编号,用两个字节来存储。每一个字节都有自己的编号,叫做叫做“地址地址”。1个字节由个字节由8个二进制位(位的英个二进制位(位的英文是文是bit)构成,每位的取值为)构成,每位的取值为0或或1。最右端的那。最右端的那1位称为位称为“最低位最低位”,编号为,编号为0;最左端的那;最左端的那1位称位称为为“最高位最高位”,而且从最低位到最高位顺序,依,而且从最低位到最高位顺序,依次编号。次编号。7 6 5 4 3 2 1 010.1.1 字节

3、与位字节与位l我们把若干字节组成一个单元,叫做我们把若干字节组成一个单元,叫做“字字”(word)。一个字可以存放一个数据或指令。)。一个字可以存放一个数据或指令。至于一个字由几个字节组成,取决于计算机的至于一个字由几个字节组成,取决于计算机的硬件系统。一般由硬件系统。一般由1个、个、2个或个或4个字节组成,个字节组成,所对应的计算机也被称为所对应的计算机也被称为“8位机、位机、16位机或位机或32位机位机”。目前微机以。目前微机以16位机或位机或32位机为主。位机为主。在本书中作为原理讲述的是在本书中作为原理讲述的是8位机。位机。10.1.2 原码原码 l把最高位留做表示符号,其他把最高位留

4、做表示符号,其他7位表示二进制位表示二进制数,这种编码方式叫做数,这种编码方式叫做原码原码。最高位为。最高位为“0”表表示正数,为示正数,为“1”表示负数。例如:表示负数。例如:l00000011表示表示+3l10000011表示表示-3l显然,这样可以表示的数值范围在显然,这样可以表示的数值范围在+127到到-127之之间。间。l这种表示方法有一个缺陷,数值这种表示方法有一个缺陷,数值0会出现歧义:会出现歧义:l00000000表示表示+0l10000000表示表示-010.1.3 反码反码 l对于正数,反码与原码相同。例如:对于正数,反码与原码相同。例如:l00000011表示表示+3。l

5、 所谓所谓“反码反码”是指与是指与“原码原码”在表示负数时相在表示负数时相反:符号位(最高位)为反:符号位(最高位)为“1”表示负数。但其余表示负数。但其余位的值相反。例如,位的值相反。例如,11111100表示表示-3。显然,这。显然,这样可以表示的数值范围在样可以表示的数值范围在+127到到-127之间。之间。l 这种表示方法仍然有一个缺陷,数值这种表示方法仍然有一个缺陷,数值0会出现歧会出现歧义:义:l00000000表示表示+0l11111111表示表示-010.1.4 补码补码 l对于对于正数正数,补码与原码相同。,补码与原码相同。l0的补码为的补码为00000000。这样,。这样,

6、0的表示唯一。的表示唯一。l对于对于负数负数,可以从原码得到补码。步骤如下:,可以从原码得到补码。步骤如下:l符号位不变符号位不变,其余各位取反;其余各位取反;l整个数加整个数加1。l已知补码,求原码:已知补码,求原码:l符号位不变符号位不变,其余各位取反其余各位取反l整个数加整个数加1。10.1.4 补码补码l例如,已知补码为例如,已知补码为11111001,求原码。,求原码。l符号位为符号位为“1”,表示是一个负数,所以该位不变,表示是一个负数,所以该位不变,仍为仍为“1”;l其余其余7位位1111001取反后为取反后为0000110;再加;再加1,所以,所以是是10000111(-7)。

7、l计算机中的数据都采用补码。原因是计算机中的数据都采用补码。原因是:l使用补码,可以将符号位和其它位统一处理;同时,使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。如减法也可按加法来处理。如-3+4可以变成可以变成-3的补码的补码与与+4的补码相加的补码相加l两个用补码表示的数相加时,如果最高位(符号位)两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。有进位,则进位被舍弃。10.2 位运算符和位运算位运算符和位运算 l位运算表位运算表10.2.1 按位取反按位取反 l【运算符运算符】【格式格式】x【功能功能】各位翻转,即原来为各位翻转,即原来为1的位变成

8、的位变成0,原,原来为来为0的位变成的位变成1。【主要用途主要用途】间接地构造一个数,以增强程序间接地构造一个数,以增强程序的可移植性。的可移植性。【示例示例】如如x=83,y=x,则,则y=172。83(01010011)83(01010011)172(10101100)10.2.2 按位与按位与【运算符运算符】&【格式格式】x&y【功能功能】当两个操作对象二进制数的相同位都为当两个操作对象二进制数的相同位都为1时,时,结果数值的相应位为结果数值的相应位为1,否则为相应位是,否则为相应位是0。【主要用途主要用途】取取(或保留或保留)1个数的某个数的某(些些)位,其余各位置位,其余各位置0。【

9、示例示例】如如x=146,y=222,z=x&y,则,则z=146。10.2.3 按位或按位或【运算符运算符】|【格式格式】x|y【功能功能】当两个操作对象二进制数的相同位都为当两个操作对象二进制数的相同位都为0时,时,结果数值的相应位为结果数值的相应位为0,否则为相应位是,否则为相应位是1。【主要用途主要用途】将将1个数的某个数的某(些些)位置位置1,其余各位不变。,其余各位不变。【示例示例】如如x=146,y=222,z=x|y,则,则z=222。10.2.4 按位异或按位异或【运算符运算符】【格式格式】x y【功能功能】当两个操作对象二进制数的相同位的值相同时,当两个操作对象二进制数的相

10、同位的值相同时,结果数值的相应位为结果数值的相应位为0,否则为相应位是,否则为相应位是1。【主要用途主要用途】使使1个数的某个数的某(些些)位翻转位翻转(即原来为即原来为1的位变的位变为为0,为,为0的变为的变为1),其余各位不变。,其余各位不变。【示例示例】如如x=146,y=222,z=x y,则,则z=76 10.2.5 左位移左位移【运算符运算符】【格式格式】x要位移的位数要位移的位数【功能功能】把操作对象的二进制数向左移动指定把操作对象的二进制数向左移动指定的位,并在右面补上相应的的位,并在右面补上相应的0,高位溢出。,高位溢出。【示例示例】如如x=01010011,y=x【格式格式

11、】x要位移的位数要位移的位数【功能功能】把操作对象的二进制数向右移动指定的位把操作对象的二进制数向右移动指定的位,移出的低位舍弃;高位:,移出的低位舍弃;高位:(1)对无符号数和有符号中的正数,补对无符号数和有符号中的正数,补0;(2)有符号数中的负数,取决于所使用的系统:补有符号数中的负数,取决于所使用的系统:补0的称为的称为“逻辑右移逻辑右移”,补,补1的称为的称为“算术右移算术右移”。【示例示例】如如x=01010011,y=x2,则则y=00010100【注意注意】右移会引起数据的变化,具体说,右移一右移会引起数据的变化,具体说,右移一位相当于对原来的数值除以位相当于对原来的数值除以2

12、。右移。右移n位相当于对原位相当于对原来的数值除以来的数值除以2 n说 明lx、y和和“位数位数”等操作数,都只能是整型或字符型数据。等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。除按位取反为单目运算符外,其余均为双目运算符。l参与运算时,操作数参与运算时,操作数x和和y都必须首先转换成二进制形式,都必须首先转换成二进制形式,然后再执行相应的按位运算。例如:然后再执行相应的按位运算。例如:l5220即即10125即即101001000101。l 复合赋值运算符复合赋值运算符l除按位取反运算外除按位取反运算外,其余其余5个位运算符均可与赋值运算符一个位运算符均

13、可与赋值运算符一起起,构成复合赋值运算符构成复合赋值运算符:&=、|+、=、=。例如,。例如,a&=b相当于相当于 a=a&b。a =2相当于:相当于:a=a 2。l不同长度数据间的位运算不同长度数据间的位运算低字节对齐,短数的高字节按低字节对齐,短数的高字节按最高位补位:最高位补位:l对无符号数和有符号中的正数,补对无符号数和有符号中的正数,补0;l有符号数中的负数,补有符号数中的负数,补1。10.3 程序举例程序举例 l【例例10-1】取一个整数取一个整数a从右端开始的从右端开始的47位。位。#include void main()unsigned a,b,c,d;scanf(%o,&a)

14、;b=a4;c=(04);d=b&c;printf(%o,%dn%o,%dn,a,a,d,d);【例例10-2】从键盘上输入一个正整数从键盘上输入一个正整数给给int变量变量num,按二进制位输出该数。,按二进制位输出该数。#include “stdio.h“void main()int num,mask,i;printf(”Input a integer number:”);scanf(“%d”,&num);mask=115;printf(“%d=”,num);for(i=1;i=16;i+)putchar(num&mask?1:0);num=1;if(i%4=0)putchar(,);pr

15、intf(bBn);l本章介绍的位运算在系统软件开发与计算机用于检测本章介绍的位运算在系统软件开发与计算机用于检测和控制领域中有重要应用,也是和控制领域中有重要应用,也是C语言的特色之一。语言的特色之一。重点要求读者掌握位运算符及其应用。重点要求读者掌握位运算符及其应用。l学好本章必须了解计算机内数据的组织与存储形式,学好本章必须了解计算机内数据的组织与存储形式,二进制的原理是关键。二进制的原理是关键。l本章介绍的位运算包括按位与(本章介绍的位运算包括按位与(&)、按位或()、按位或(|)、)、按位异或(按位异或()、按位取反()、按位取反()、左移()、左移(),实质上都是),实质上都是1和

16、和0的变换或者移动,学好的变换或者移动,学好本章对今后计算机系统的编程很有好处。本章对今后计算机系统的编程很有好处。l编写一个函数编写一个函数getbits,从一个,从一个16位的单元中取出某位的单元中取出某几位(即该几位保留原值,其余位为几位(即该几位保留原值,其余位为0)。函数调用)。函数调用形式为形式为getbits(value,n1,n2)。value为该为该16位(两个位(两个字节)中的数据值,字节)中的数据值,n1为欲取出的起始位,为欲取出的起始位,n2为欲为欲取出的结束位。如取出的结束位。如getbits(0101675,5,8)表示对八进表示对八进制制101675这个数取出它的从左面起第这个数取出它的从左面起第5位到第位到第8位。位。l写一函数,对一个写一函数,对一个16位的二进制数取出它的奇数位位的二进制数取出它的奇数位(即从左边起第(即从左边起第1,3,5,15位)位)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《C语言程序设计(第三版)》课件第10章 位运算.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|