《第15章位运算优秀课件.ppt》由会员分享,可在线阅读,更多相关《第15章位运算优秀课件.ppt(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第1515章位运算章位运算第1页,本讲稿共15页l l 主要内容15.1 15.1 位运算符位运算符15.2 15.2 位运算符的运算功能位运算符的运算功能第2页,本讲稿共15页1 15.1 5.1 位运算符位运算符 c c语言中,位运算的对象只能是整型或字符型。语言中,位运算的对象只能是整型或字符型。下表列出了下表列出了c语言提供的语言提供的6种位运算符及其运算功能。种位运算符及其运算功能。运算符运算符 含义含义 优先级优先级&|按位取反按位取反 左移左移 右移右移 按位与按位与 按位异或按位异或 按位或按位或1(高)(高)6(低)(低)2 3 4 5 以上位运算符中,只有求以上位运算符中
2、,只有求“反反”运算符(运算符()为单目运算符,)为单目运算符,其余均为双目运算符。其余均为双目运算符。第3页,本讲稿共15页 下表列出了下表列出了c语言提供的语言提供的5种扩展的赋值运算符。种扩展的赋值运算符。扩展运算符扩展运算符 表达式表达式等价的表达式等价的表达式=&=|=a=3 a=b a&=b a|=b a=a|b a=a3 a=ab a=a&b第4页,本讲稿共15页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页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 1 1 1 1 1 1 1 1 0 0 0 用八进制数表示为:用八进制数表示为:1 7 7 7 7
6、 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页4.4.“按位与按位与”运算运算 “按位与按位与”运算符运算符&是位运算中一个双目运算符。其作用:是位运算中一个双目运算符。其作用:把把参加运算的两个运算数按对应的二进制位进行参加运算的两个运算数按对应的二进制位进行“与与”运算,当运算,当两个对应的位都为两个对应的位都为1时,该位的结果为时,该位的结果为1;否则为;否则为0。例如,表。例如,表达式达式12&10的运
7、算如下:的运算如下:右移时,若右端移出的部分不含有效二进制数右移时,若右端移出的部分不含有效二进制数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页 “按位与按位与”运算具有如下特征:运算具有如下特征:任何位上的二进制数,只要和任何位上的二进制数,只要和0 0“与与”,该位即被屏蔽(清零)
8、;和,该位即被屏蔽(清零);和1 1“与与”,该位保留原值,该位保留原值不变不变。“按位与按位与”运算的这个特性很具实用性。例如,设有:运算的这个特性很具实用性。例如,设有:char a=0322;char a=0322;则则a a的二进制数为:的二进制数为:1101001011010010。若要保留若要保留a a的第的第5 5位,只需和这样的数进行位,只需和这样的数进行“与与”运算:这个数的第运算:这个数的第5 5位为位为1 1,其余位为其余位为0 0。其运算过程如下:。其运算过程如下: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
9、 0 0 0 (即(即0020)第10页,本讲稿共15页5.5.“按位异或按位异或”运算运算 “按为异或按为异或”运算符运算符 是位运算中一个双目运算符。其作用:是位运算中一个双目运算符。其作用:参与运算的两个运算数中对应的二进制位上,若数相同,则该位参与运算的两个运算数中对应的二进制位上,若数相同,则该位的结果为的结果为0;若数不同,则该位的结果为;若数不同,则该位的结果为1。例如:。例如:063:0 0 1 1 0 0 1 1 0303:1 1 0 0 0 0 1 1 0630303:1 1 1 1 0 0 0 0 (即即0360)第11页,本讲稿共15页 “按位异或按位异或”运算具有如下
10、特征:运算具有如下特征:要使某位的数反转,只要使要使某位的数反转,只要使其和其和1 1进行进行“异或异或”运算;要使某位保持原数,只要使其和运算;要使某位保持原数,只要使其和0 0进行进行“异或异或”运算即可运算即可。“按位异或按位异或”运算的这个特性很具实运算的这个特性很具实用性。例如,设有:用性。例如,设有:char a=0152;char a=0152;则则a a的二进制数为:的二进制数为:0110101001101010。若希望若希望a a的高的高4 4位不变,低位不变,低4 4位取反,只需将高位取反,只需将高4 4位分别位分别和和0 0“异或异或”,低,低4 4位分别和位分别和1 1
11、“异或异或”即可即可。其运算过程如下:。其运算过程如下: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页6.6.“按位或按位或”运算运算 “按位或按位或”运算符运算符|是位运算中一个双目运算符。其作用:是位运算中一个双目运算符。其作用:把参加运算的两个运算数按对应的二进制位进行把参加运算的两个运算数按对应的二进制位进行“或或”运算,当运算,当两个对应的位中有一个为两个对应的位中有一个为1时,该位的运算结果为时,该位的运算结果为1;只有当两个;只有当两个相应位的数都为相应位的数都
12、为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页 利用利用“按位或按位或”运算的操作特点,可以使一个数中的指定位运算的操作特点,可以使一个数中的指定位上置成上置成1 1,其余位不变,即:将希望置,其余位不变,即:将希望置1 1的位与的位与1 1进行进行“或或”运运算;保持不变的位与算;保持不变的位与0 0进行进行“或或”运算运算。例如:若使例如:若使a中的高中的高4位不变,低位不变,低4位置位置1,可采用表达
13、式:,可采用表达式:a=a|017。第14页,本讲稿共15页7.7.位数不同的运算数之间的运算规则位数不同的运算数之间的运算规则 位运算的对象可以是整型(位运算的对象可以是整型(long int long int 或或 int int或或 short short)和字符)和字符型(型(charchar)数据。当两个运算数类型不同时位数会不同。遇到这种)数据。当两个运算数类型不同时位数会不同。遇到这种情况,系统将自动进行如下处理:情况,系统将自动进行如下处理:(1)(1)先将两个运算数右端对齐先将两个运算数右端对齐。(2)(2)再将位数短的一个运算数往高位扩充,即:无符号数和正再将位数短的一个运算数往高位扩充,即:无符号数和正整数左侧用整数左侧用0 0补全,负数左侧用补全,负数左侧用1 1补全,然后对位数相等的这两个补全,然后对位数相等的这两个运算数按位进行位运算。运算数按位进行位运算。第15页,本讲稿共15页