《位运算符和位运算精选PPT.ppt》由会员分享,可在线阅读,更多相关《位运算符和位运算精选PPT.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、关于位运算符和位运算第1页,讲稿共21张,创作于星期一12.1位运算符和位运算位运算符和位运算运算符运算符含义含义运算符运算符含义含义按位与按位与取反取反按位或按位或右移右移第2页,讲稿共21张,创作于星期一数值在计算机中的表示数值在计算机中的表示1.二进制位与字节二进制位与字节计算机系统的内存储器,是由许多称为字节的单元组成的,计算机系统的内存储器,是由许多称为字节的单元组成的,1个字节由个字节由8个二进制位(个二进制位(bit)构成,每位的取值为)构成,每位的取值为0/1。最右端的。最右端的那那1位称为位称为“最低位最低位”,编号为,编号为0;最左端的那;最左端的那1位称为位称为“最高位最
2、高位”,而且从最低位到最高位顺序,依次编号。图,而且从最低位到最高位顺序,依次编号。图11-1是是1个字节个字节各二进制位的编号。各二进制位的编号。图图11-11个字节各二进制位的编号个字节各二进制位的编号2.数值的原码表示数值的原码表示数值的原码表示是指,将最高位用作符号位(数值的原码表示是指,将最高位用作符号位(0表示正数,表示正数,1表示负数),其余各位代表数值本身的绝对值(以二进制形表示负数),其余各位代表数值本身的绝对值(以二进制形式表示)的表示形式。为简化描述起见,本节约定用式表示)的表示形式。为简化描述起见,本节约定用1个字节个字节表示表示1个整数个整数。76543210第3页,
3、讲稿共21张,创作于星期一例如,例如,+9的原码是的原码是00001001符号位上的符号位上的0表示正数表示正数-9的原码是的原码是10001001。符号位上的符号位上的1表示负数表示负数3.数值的反码表示数值的反码表示数值的反码表示分两种情况:数值的反码表示分两种情况:(1)正数的反码:与原码相同。)正数的反码:与原码相同。例如,例如,+9的反码是的反码是00001001。(2)负负数数的的反反码码:符符号号位位为为1,其其余余各各位位为为该该数数绝绝对值的原码按位取反(对值的原码按位取反(1变变0、0变变1)。)。例例如如,-9的的反反码码:因因为为是是负负数数,则则符符号号位位为为“1”
4、;其其余余7位位为为-9的的绝绝对对值值+9的的原原码码0001001按按位位取取反反为为1110110,所所以以-9的反码是的反码是11110110。第4页,讲稿共21张,创作于星期一4.数值的补码表示数值的补码表示数值的补码表示也分两种情况:数值的补码表示也分两种情况:(1)正数的补码:与原码相同。)正数的补码:与原码相同。例如,例如,+9的补码是的补码是00001001。(2)负负数数的的补补码码:符符号号位位为为1,其其余余位位为为该该数数绝绝对对值值的的原原码码按按位位取取反;然后整个数加反;然后整个数加1。例例如如,-9的的补补码码:因因为为是是负负数数,则则符符号号位位为为“1”
5、;其其余余7位位为为-9的的绝绝对对值值+9的的原原码码0001001按按位位取取反反为为1110110;再再加加1,所所以以-9的的补补码是码是11110111。已知一个数的补码,求原码的操作分两种情况:已知一个数的补码,求原码的操作分两种情况:(1)如如果果补补码码的的符符号号位位为为“0”,表表示示是是一一个个正正数数,所所以以补补码码就是该数的原码。就是该数的原码。(2)如如果果补补码码的的符符号号位位为为“1”,表表示示是是一一个个负负数数,求求原原码码的的操作可以是:符号位不变,其余各位取反,然后再整个数加操作可以是:符号位不变,其余各位取反,然后再整个数加1。第5页,讲稿共21张
6、,创作于星期一例例如如,已已知知一一个个补补码码为为11111001,则则原原码码是是10000111(-7):因因为为符符号号位位为为“1”,表表示示是是一一个个负负数数,所所以以该该位位不不变变,仍仍为为“1”;其其余余7位位1111001取取反反后后为为0000110;再再加加1,所以是,所以是10000111。5.数值在计算机中的表示数值在计算机中的表示补码补码在在计计算算机机系系统统中中,数数值值一一律律用用补补码码表表示示(存存储储),原原因因在在于于:使使用用补补码码,可可以以将将符符号号位位和和其其它它位位统统一一处处理理;同同时时,减减法法也也可可按按加加法法来来处处理理。另
7、另外外,两两个个用用补补码码表表示示的的数数相相加加时时,如如果果最最高高位位(符符号号位位)有有进进位位,则则进进位位被被舍弃。舍弃。第6页,讲稿共21张,创作于星期一12.1.1按位与按位与运算符运算符&(1)格式格式:x&y(2)规则规则:对应位均为:对应位均为1时才为时才为1,否则为,否则为0:3&5=1。例如,例如,3&5=1:0011&01010001=1(3)主要用途主要用途:取:取(或保留或保留)1个数的某个数的某(些些)位,其余各位位,其余各位置置0。第7页,讲稿共21张,创作于星期一12.1.2按位或按位或运算符运算符|(1)格式格式:x|y(2)规则规则:对应位均为:对应
8、位均为0时才为时才为0,否则为,否则为1:3|9=11。例如,例如,3|9=11:0011|10011011=11(3)主要用途主要用途:将:将1个数的某个数的某(些些)位置位置1,其余各位,其余各位不变。不变。第8页,讲稿共21张,创作于星期一12.1.3按位异或按位异或运算符运算符(1)格式:格式:xy(2)规则:对应位相同时为规则:对应位相同时为0,不同时为,不同时为1:5742=19。00111001&0010101000010011(3)主主要要用用途途:使使1个个数数的的某某(些些)位位翻翻转转(即即原原来来为为1的的位位变变为为0,为为0的的变变为为1),其余各位不变。,其余各位
9、不变。12.1.4按位取反按位取反运算符运算符(1)格式:格式:x(2)规规则则:各各位位翻翻转转,即即原原来来为为1的的位位变变成成0,原原来来为为0的的位位变变成成1:在在IBM-PC机中,机中,00 xffff,9=0 xfff6。(3)主要用途:间接地构造一个数,以增强程序的可移植性。主要用途:间接地构造一个数,以增强程序的可移植性。第9页,讲稿共21张,创作于星期一12.1.5按位左移按位左移运算符运算符(1)格式:格式:a位数位数(2)规规则则:使使操操作作数数的的各各位位左左移移,低低位位补补0,高高位位溢溢出:出:a=15,则则a=a(1)格式:格式:a位数位数(2)规规则则:
10、使使操操作作数数的的各各位位右右移移,移移出出的的低低位位舍弃;高位:舍弃;高位:1)对无符号数和有符号中的正数,补对无符号数和有符号中的正数,补0;2)有有符符号号数数中中的的负负数数,取取决决于于所所使使用用的的系系统统:补补0的的称称为为“逻逻辑辑右右移移”,补补1的的称称为为“算算术术右右移移”。第11页,讲稿共21张,创作于星期一例如例如:a=017:00001111a2为:为:00000011又如又如a:10101111a2:00101011(逻辑右移)(逻辑右移)a2:11101011(算术右移)(算术右移)12.1.7位运算赋值运算符位运算赋值运算符a&=b等价于等价于a=a&
11、ba=b等价于等价于a=a=8;/*右移右移8位,将位,将811位移到低位移到低4位上位上*/mask=(04);/*间接构造间接构造1个低个低4位为位为1、其余各位为、其余各位为0的整数的整数*/printf(result=0 x%xn,num&mask);第13页,讲稿共21张,创作于星期一程序说明:程序说明:(04)按按位位取取0的的反反,为为全全1;左左移移4位位后后,其其低低4位位为为0,其其余余各各位位为为1;再再按按位位取取反反,则则其其低低4位位为为1,其其余余各位为各位为0。这个整数正是我们所需要的。这个整数正是我们所需要的。例例从从键键盘盘上上输输入入1个个正正整整数数给给
12、int变变量量num,按按二二进制位输出该数进制位输出该数第14页,讲稿共21张,创作于星期一#includestdio.hmain()intnum,mask,i;printf(Inputaintegernumber:);scanf(%d,&num);mask=115;/*构构造造1个个最最高高位位为为1、其其余余各各位位为为0的的整整数数(屏屏蔽蔽字字)*/printf(%d=,num);for(i=1;i=16;i+)putchar(num&mask?1:0);/*输输出出最最高高位位的的值值(1/0)*/num=1;/*将次高位移到最高位上将次高位移到最高位上*/if(i%4=0)put
13、char(,);/*四四位位一一组组,用用逗逗号号分分开开*/printf(bBn);第15页,讲稿共21张,创作于星期一12.3位段位段有时,存储有时,存储1个信息不必占用个信息不必占用1个字节,只需个字节,只需二进制的二进制的1个(或多个)位就够用。如果仍然使个(或多个)位就够用。如果仍然使用结构类型,则造成内存空间的浪费。为此,用结构类型,则造成内存空间的浪费。为此,C语言引入了位段类型。语言引入了位段类型。第16页,讲稿共21张,创作于星期一1.位段的概念与定义位段的概念与定义所谓位段类型,是一种特殊的结构类型,其所有成员均以二进制位为所谓位段类型,是一种特殊的结构类型,其所有成员均以
14、二进制位为单位定义长度,并称成员为位段。单位定义长度,并称成员为位段。例如,例如,CPU的状态寄存器,按位段类型定义如下:的状态寄存器,按位段类型定义如下:structstatusunsignedsign:1;/*符号标志符号标志*/unsignedzero:1;/*零标志零标志*/unsignedcarry:1;/*进位标志进位标志*/unsignedparity:1;/*奇偶奇偶/溢出标志溢出标志*/unsignedhalf_carry:1;/*半进位标志半进位标志*/unsignednegative:1;/*减标志减标志*/flags;第17页,讲稿共21张,创作于星期一显显然然,对对C
15、PU的的状状态态寄寄存存器器而而言言,使使用用位位段段类类型型(仅仅需需1个个字字节节),比比使使用用结结构构类类型型(需需要要6个个字字节)节省了节)节省了5个字节。个字节。2.说明说明(1)因因为为位位段段类类型型是是一一种种结结构构类类型型,所所以以位位段段类类型型和和位位段段变变量量的的定定义义,以以及及对对位位段段(即即位位段段类类型型中中的成员)的引用,均与结构类型和结构变量一样。的成员)的引用,均与结构类型和结构变量一样。(2)对对位位段段赋赋值值时时,要要注注意意取取置置范范围围。一一般般地地说说,长度为长度为n的位段,其取值范围是:的位段,其取值范围是:0(2n-1)。)。(
16、3)使使用用长长度度为为0的的无无名名位位段段,可可使使其其后后续续位位段段从从下下1个字节开始存储。个字节开始存储。第18页,讲稿共21张,创作于星期一例如,例如,structstatusunsignedsign:1;/*符号标志符号标志*/unsignedzero:1;/*零标志零标志*/unsignedcarry:1;/*进位标志进位标志*/unsigned:0;/*长度为长度为0的无名位段的无名位段*/unsignedparity:1;/*奇偶奇偶/溢出标志溢出标志*/unsignedhalf_carry:1;/*半进位标志半进位标志*/unsignednegative:1;/*减标志
17、减标志*/flags;第19页,讲稿共21张,创作于星期一原原本本6 6个个标标志志位位是是连连续续存存储储在在1 1个个字字节节中中的的。由由于于加加入入了了1 1个个长长度度为为0 0的的无无名名位位段段,所所以以其其后后的的3 3个个位位段段,从从下下1 1个个字字节节开开始始存存储,一共占用储,一共占用2 2个字节。个字节。(4 4)1 1个个位位段段必必须须存存储储在在1 1个个存存储储单单元元(通通常常为为1 1字字节节)中中,不不能能跨跨2 2个个。如如果果本本单单元元不不够够容容纳纳某某位位段段,则则从从下下1 1个个单单元元开始存储该位段。开始存储该位段。(5 5)可可以以用用%d%d、%x%x、%u%u和和%o%o等等格格式式字字符符,以以整整数数形形式式输输出出位段。位段。(6 6)在在数数值值表表达达式式中中引引用用位位段段时时,系系统统自自动动将将位位段段转转换换为为整型数。整型数。第20页,讲稿共21张,创作于星期一11.10.2022感谢大家观看第21页,讲稿共21张,创作于星期一