《第15章位运算PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第15章位运算PPT讲稿.ppt(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1515章位运算章位运算第1页,共15页,编辑于2022年,星期日l l 主要内容15.1 15.1 位运算符位运算符15.2 15.2 位运算符的运算功能位运算符的运算功能第2页,共15页,编辑于2022年,星期日1 15.1 5.1 位运算符位运算符 c c语言中,位运算的对象只能是整型或字符型。语言中,位运算的对象只能是整型或字符型。下表列出了下表列出了c语言提供的语言提供的6种位运算符及其运算功能。种位运算符及其运算功能。运算符运算符 含义含义 优先级优先级&|按位取反按位取反 左移左移 右移右移 按位与按位与 按位异或按位异或 按位或按位或1(高)(高)6(低)(低)2 3 4
2、5 以上位运算符中,只有求以上位运算符中,只有求“反反”运算符(运算符()为单目运算符,)为单目运算符,其余均为双目运算符。其余均为双目运算符。第3页,共15页,编辑于2022年,星期日 下表列出了下表列出了c语言提供的语言提供的5种扩展的赋值运算符。种扩展的赋值运算符。扩展运算符扩展运算符 表达式表达式等价的表达式等价的表达式=&=|=a=3 a=b a&=b a|=b a=a|b a=a3 a=ab a=a&b第4页,共15页,编辑于2022年,星期日1 15.2 5.2 位运算符的运算功能位运算符的运算功能1.1.“按位取反按位取反”运算运算 运算符运算符 是位运算中唯一的一个单目运算符
3、。运算对象置于运是位运算中唯一的一个单目运算符。运算对象置于运算符的右边,其运算功能是把运算对象的内容按位取反。即:算符的右边,其运算功能是把运算对象的内容按位取反。即:使每一位上的使每一位上的0变变1,1变变0。在作位运算前,把作位运算对象的值转换为二进制数。在作位运算前,把作位运算对象的值转换为二进制数。例如:例如:求表达式求表达式 0115的值。的值。0 1 0 0 1 1 0 1 (先将八进制数先将八进制数0115转换为二进制数转换为二进制数)1 0 1 1 0 0 1 0 (最后换算成八进制数为最后换算成八进制数为0262)第5页,共15页,编辑于2022年,星期日2.2.“左移左移
4、”运算运算 运算符运算符 是位运算中一个双目运算符。运算符左边是移位对象,是位运算中一个双目运算符。运算符左边是移位对象,右边是整型表达式,代表左移的位数。右边是整型表达式,代表左移的位数。左移时,右端(低位)补左移时,右端(低位)补0;左端(高位)移出的部分舍弃;左端(高位)移出的部分舍弃。例如:例如:char a=6,b;b=a2;用二进制来表示运算过程如下:用二进制来表示运算过程如下:a:0 0 0 0 0 1 1 0 (a=6)b=a 是位运算中一个双目运算符。运算符左边是移位对是位运算中一个双目运算符。运算符左边是移位对象,右边是整型表达式,代表右移的位数。象,右边是整型表达式,代表
5、右移的位数。右移时,右端(低位)右移时,右端(低位)移出的部分舍弃移出的部分舍弃,左端(高位)移入的二进制数分两种情况:对,左端(高位)移入的二进制数分两种情况:对于无符号整数和正整数,高位补于无符号整数和正整数,高位补0;对于负整数,高位补;对于负整数,高位补1.(这(这是因为负数在机器内用补码表示)。是因为负数在机器内用补码表示)。例如:例如:char a=64,b;b=a2;移位情况如下:移位情况如下:a:0 1 0 0 0 0 0 0 (a=64)b=a2;用二进制来表示运算过程如下:用二进制来表示运算过程如下:a为为-8-8 时在机内的二进制码:时在机内的二进制码:1 1 1 1 1
6、 1 1 1 1 1 1 1 1 0 0 0 用八进制数表示为:用八进制数表示为:1 7 7 7 7 0 b=a2后后b在机内的二进制码:在机内的二进制码:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 用八进制数表示为:用八进制数表示为:1 7 7 7 7 6 b b的值为的值为-2.-2.第8页,共15页,编辑于2022年,星期日4.4.“按位与按位与”运算运算 “按位与按位与”运算符运算符&是位运算中一个双目运算符。其作用:是位运算中一个双目运算符。其作用:把参加运算的两个运算数按对应的二进制位进行把参加运算的两个运算数按对应的二进制位进行“与与”运算,运算,当两个对应的
7、位都为当两个对应的位都为1时,该位的结果为时,该位的结果为1;否则为;否则为0。例如,。例如,表达式表达式12&10的运算如下:的运算如下:右移时,若右端移出的部分不含有效二进制数右移时,若右端移出的部分不含有效二进制数1 1,则每右,则每右移一位,相当于移位对象除以移一位,相当于移位对象除以2 2。若右端移出的部分包含有。若右端移出的部分包含有效二进制数效二进制数1 1,这个特性就不适用了。,这个特性就不适用了。12:0 0 0 0 1 1 0 0&10:0 0 0 0 1 0 1 0 结果:结果:0 0 0 0 1 0 0 0 (即(即0010)第9页,共15页,编辑于2022年,星期日
8、“按位与按位与”运算具有如下特征:运算具有如下特征:任何位上的二进制数,只要和任何位上的二进制数,只要和0 0“与与”,该位即被屏蔽(清零);和,该位即被屏蔽(清零);和1 1“与与”,该位保留原值不,该位保留原值不变变。“按位与按位与”运算的这个特性很具实用性。例如,设有:运算的这个特性很具实用性。例如,设有:char a=0322;char a=0322;则则a a的二进制数为:的二进制数为:1101001011010010。若要保留若要保留a a的第的第5 5位,只需和这样的数进行位,只需和这样的数进行“与与”运算:这个数的第运算:这个数的第5 5位为位为1 1,其余,其余位为位为0 0
9、。其运算过程如下:。其运算过程如下:a:1 1 0 1 0 0 1 0&020:0 0 0 1 0 0 0 0 a&020:0 0 0 1 0 0 0 0 (即(即0020)第10页,共15页,编辑于2022年,星期日5.5.“按位异或按位异或”运算运算 “按为异或按为异或”运算符运算符 是位运算中一个双目运算符。其作用:是位运算中一个双目运算符。其作用:参与运算的两个运算数中对应的二进制位上,若数相同,则该位的参与运算的两个运算数中对应的二进制位上,若数相同,则该位的结果为结果为0;若数不同,则该位的结果为;若数不同,则该位的结果为1。例如:。例如:063:0 0 1 1 0 0 1 1 0
10、303:1 1 0 0 0 0 1 1 0630303:1 1 1 1 0 0 0 0 (即即0360)第11页,共15页,编辑于2022年,星期日 “按位异或按位异或”运算具有如下特征:运算具有如下特征:要使某位的数反转,只要要使某位的数反转,只要使其和使其和1 1进行进行“异或异或”运算;要使某位保持原数,只要使其和运算;要使某位保持原数,只要使其和0 0进进行行“异或异或”运算即可运算即可。“按位异或按位异或”运算的这个特性很具实用运算的这个特性很具实用性。例如,设有:性。例如,设有:char a=0152;char a=0152;则则a a的二进制数为:的二进制数为:011010100
11、1101010。若希望若希望a a的高的高4 4位不变,低位不变,低4 4位取反,只需将高位取反,只需将高4 4位分别和位分别和0 0“异或异或”,低,低4 4位分别和位分别和1 1“异或异或”即可即可。其运算过程如下:。其运算过程如下:a:0 1 1 0 1 0 1 0 017:0 0 0 0 1 1 1 1 a017:0 1 1 0 0 1 0 1 (即即01450145)第12页,共15页,编辑于2022年,星期日6.6.“按位或按位或”运算运算 “按位或按位或”运算符运算符|是位运算中一个双目运算符。其作用:是位运算中一个双目运算符。其作用:把把参加运算的两个运算数按对应的二进制位进行
12、参加运算的两个运算数按对应的二进制位进行“或或”运算,当运算,当两个对应的位中有一个为两个对应的位中有一个为1时,该位的运算结果为时,该位的运算结果为1;只有当两;只有当两个相应位的数都为个相应位的数都为0,该位的运算结果才为,该位的运算结果才为0。例如:。例如:0123:0 1 0 1 0 0 1 1|014:0 0 0 0 1 1 0 0 0123|014:0 1 0 1 1 1 1 1 (即(即0137)第13页,共15页,编辑于2022年,星期日 利用利用“按位或按位或”运算的操作特点,可以使一个数中的指定运算的操作特点,可以使一个数中的指定位上置成位上置成1 1,其余位不变,即:将希
13、望置,其余位不变,即:将希望置1 1的位与的位与1 1进行进行“或或”运算;保持不变的位与运算;保持不变的位与0 0进行进行“或或”运算运算。例如:若使例如:若使a中的高中的高4位不变,低位不变,低4位置位置1,可采用表达式:,可采用表达式:a=a|017。第14页,共15页,编辑于2022年,星期日7.7.位数不同的运算数之间的运算规则位数不同的运算数之间的运算规则 位运算的对象可以是整型(位运算的对象可以是整型(long int long int 或或 int int或或 short short)和字)和字符型(符型(charchar)数据。当两个运算数类型不同时位数会不同。遇)数据。当两个运算数类型不同时位数会不同。遇到这种情况,系统将自动进行如下处理:到这种情况,系统将自动进行如下处理:(1)(1)先将两个运算数右端对齐先将两个运算数右端对齐。(2)(2)再将位数短的一个运算数往高位扩充,即:无符号数再将位数短的一个运算数往高位扩充,即:无符号数和正整数左侧用和正整数左侧用0 0补全,负数左侧用补全,负数左侧用1 1补全,然后对位数相等补全,然后对位数相等的这两个运算数按位进行位运算。的这两个运算数按位进行位运算。第15页,共15页,编辑于2022年,星期日
限制150内