收藏 分销(赏)

第17章位运算操作符.ppt

上传人:pc****0 文档编号:13748216 上传时间:2026-04-09 格式:PPT 页数:41 大小:489.50KB 下载积分:10 金币
下载 相关 举报
第17章位运算操作符.ppt_第1页
第1页 / 共41页
第17章位运算操作符.ppt_第2页
第2页 / 共41页


点击查看更多>>
资源描述
联系方式:,,北京源智天下科技有限公司,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,1-,*,北京源智天下科技有限公司,联系方式:,,第,17,章 位运算操作符,在本章的学习中,需要掌握以下内容:,字节和位的概念;,原码与补码的转换;,6,种位操作符及其组成的位运算赋值操作符的使用;,各个位操作符的特殊用途;,位域的概念和位域的使用。,17.1,位运算,位运算是指对数据的二进制位进行处理的运算。位运算与数据在内存中的存储方式息息相关,因此在介绍位运算操作符之前,有必要先介绍一些操作系统中数据存储和处理的相关知识。本节首先介绍字节与位的概念以及两者的关系,再介绍数据在内存中的储存方式。,17.1.1,字节与位,在前面的介绍中已多次涉及到字节的概念。操作系统中的各种类型的数值都由若干个字节组成,字节也是数据存取和数值计算的基本单元。从内存中读取数据是以字节为最小单位,向内存中写入数据也是以字节为最小单位。将数值输出到文件和从文件获取数值时,最小单位也是字节。,17.1.1,字节与位,字节在操作系统中可以分为更小的单元“位”。大部分系统中,,1,个字节由,8,个位组成,每个位的值为,0,或,1,。一个字节的数值由其,8,个位的值决定,如果一个字节的内容为“,01101010”,。其对应的值为:,这个字节的值为,8,个位组成的二进制数。但是在操作系统中,数值的存储并不是直接以其二进制值存储的。,17.1.2,补码,在操作系统中,数值一律用补码来存储。一个数值的二进制值可以称其为原码,存储时会将原码表示为补码。补码的最高位为符号位,数值的补码表示可以分为以下两种情况。,17.1.2,补码,1,非负数的补码,非负数的补码与原码相同。,例如,,11,的原码为,00001011,,其补码也为,00001011,。,注意:为了简化书写,讨论位运算时,大部分的数值只用一个字节表示。,2,负数的补码,负数的补码的符号位为,1,,其余位为将该数绝对值的原码按位取反后再加,1,的结果。例如,,-15,的补码:因为是负数,则符号位为“,1”,,整个为,10001111,;其余,7,位为,-15,的绝对值的原码按位取反,即,0001111,取反后为,1110000,,再加,1,为,1110001,;加上符号位,最后,15,的补码是,11110001,。已知一个数的补码,其求原码的过程与已知原码求补码的过程完全一样:,如果补码的符号位为“,0”,,表示是一个正数,所以补码就是该数的原码。,如果补码的符号位为“,1”,,表示是一个负数,求原码的操作可以是:符号位为,1,,其余各位取反加,1,。,使用补码计算时,可以将符号位和其他位统一处理。,17.1.2,补码,例如,,7+15,,其补码相加如左图所示。,(-7)+(-15),,其补码相加如右图所示。,17.1.2,补码,注意:两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。,减法也可按加法来处理,,7 15,的计算过程如下图所示。,17.1.2,补码,17.2,位运算操作符,C,语言共提供了,6,个位运算操作符,包括取反操作符(,)、位或操作符(,|,)、位与操作符(,&,)、异或操作符(,)和位移操作符(,和,),右移操作符的作用是将一个数的各二进制值全部右移若干位。其使用形式如下:,数值,1,数值,2;,该表达式将数值,1,的二进制值右移(数值,2,)位,移到右端的低位被舍弃,而高位补入的数值由符号位决定。如果是无符号数,则高位补入的数为,0,。例如:,int,a=39;,a=a 2;,则变量,a,将右移两位,即,00100111,右移两位,得到,00001001,,右端的两个,1,被舍弃。如下图所示。,17.2.5,右移操作符(,),17.2.5,右移操作符(,),如果是有符号数,则不同的系统有不同的处理方式。有的系统补入,0,,有的补入符号位。补入,0,的为“逻辑右移”,补入原符号位的为“算术右移”。例如,将,-15,右移两位,算术右移后结果为,11111100,,逻辑右移结果为,00111100,,如下图所示。,17.2.6,左移操作符(,),左移操作符将一个数的各个二进制位值全部左移若干位。使用形式如下:,数值,1,数值,2;,该表达式将数值,1,的二进制值左移(数值,2,)位,移到左端的高位被舍弃,而低位补入的数值为,0,。例如:,int,a=39;,int,b=a 1;,int,c=a 2;,int,d=a 3;,a,的值为,39,,即,00100111,;,b,的值为,39,左移,1,位的结果,左端舍去,1,个,0,,右端补入,1,个,0,,得到,01001110,;,c,值为,39,左移,2,位的结果,左端舍去,2,个,0,,右端补入,2,个,0,,得到,10011100,;,d,值为,39,左移,3,位的结果,左端舍去,2,个,0,和,1,个,1,,右端补入,3,个,0,,得到,00111000,,如下图所示。,17.2.6,左移操作符(,),17.2.6,左移操作符(,=,=3;,等效于,a=a 3;,又例如:,a,等效于,a=a&b,范例,17-7,第,20,行也可以改写为:,flag=1;,17.3,位运算操作符使用举例,位运算操作符在,C,语言中的使用十分灵活,通过一些巧妙地算法可以高效地实现一些实用的功能。为了更熟悉位运算操作符的使用,本节将继续讨论两个例子。,17.3.1,循环移位,循环移位是一种重要的移位方式。循环移位区别于一般移位的是移位时没有数位的丢失。循环左移时,用从左边移出的位填充字的右端;而循环右移时,用从右边移出的位填充字的左侧。本题暂只讨论循环右移。,例如,要将,39,循环右移,2,位,即,00100111,右移两位,移到右端的两个,1,不会丢失,将补到左端的,2,个空缺位置上,如下图所示。,17.3.1,循环移位,例如要对,a,(无符号数)循环右移,3,位,可以采用以下方案:,(,1,)首先把将要移出右端的,3,个位左移,8-3,位(假定,a,占,8,个位)后保存在,b,中,此时,b,形式如下图第,2,行所示,其中,yyy,是,a,的后,3,位。,(,2,)将,a,右移,3,位,右端,3,位被舍弃,又由于,a,为无符号数,左端添加,3,个,0,,如下图第,3,行所示。,(,3,)最后将,a,与,b,位或,由于,0,和任意值位或补改变该值,因此得到,yyyxxxxx,,如下图第,4,行所示。,17.3.2,使用子网掩码,子网掩码是一个,32,位地址,用于屏蔽,IP,地址的一部分以区别网络标识和主机标识,并说明该,IP,地址是在局域网上,还是在外部网上。如果一个,IP,地址与子网掩码相与的结果与一个子网地址相同,那么这个,IP,地址便属于该子网。有两个子网地址,59.64.200.0,和,59.64.201.0,,两个,IP,地址,59.64.200.18,和,59.64.201.20,,子网掩码位,255.255.255.0,。要求判断它们的归属。,17.4,综合练习,1,。将十六进制表示的,IP,地址以标准字符串形式输出。例如,十六进制为,0 x03b40c812,的,IP,地址,字符串形式为“,59.64.200.18”,。,2,。参考位的循环右移,来实现循环左移的功能函数。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服