中科大C语言程序设计.ppt
第9章 位 运 算,C语言程序设计-第9章 位运算,2,目 录,位运算和位运算符位运算举例,C语言程序设计-第9章 位运算,3,位运算,按二进制位进行运算位运算的运算对象是二进制的位位运算速度快,效率高,节省存储空间只能对整型数据(包括字符型)进行位运算负数以补码形式参与运算注意与逻辑运算区别,C语言程序设计-第9章 位运算,4,位运算符(Bitwise Operators),C语言程序设计-第9章 位运算,5,按位与(Bitwise AND),运算规则0 用法按位清零保留某些指定位,C语言程序设计-第9章 位运算,6,按位与举例,运算举例 1010,1101(0 xAD)&0110,1001(0 x69)0010,1001(0 x29)按位清零、保留xxxx,xxxx_&0110,0010(0 x62)0 xx0,00 x0_,C语言程序设计-第9章 位运算,7,按位或(Bitwise Inclusive OR),运算规则0|0=0;0|1=1;1|0=1;1|1=1;用法按位置一,C语言程序设计-第9章 位运算,8,按位或举例,运算举例 1010,1101(0 xAD)|0110,1001(0 x69)1110,1101(0 xED)按位置一xxxx,xxxx_|0110,0010(0 x62)x11x,xx1x_,C语言程序设计-第9章 位运算,9,按位异或(Bitwise Exclusive OR,XOR),运算规则0 0=0;0 1=1;1 0=1;1 1=0;说明相“异”则为1,相“同”则为0相当于按位且无进位的加法,C语言程序设计-第9章 位运算,10,按位异或用法举例,特定位翻转 1010,1101(0 xAD)0110,1001(0 x69)1100,0100(0 xC4)与0相异或,保持原值不变与自身相异或,则全部位清零交换两个整数值a=ab;b=ba;a=ab;,C语言程序设计-第9章 位运算,11,按位取反(Ones Complement),运算规则 0=1;1=0;用法所有位翻转获得适用于不同系统的位运算模板,C语言程序设计-第9章 位运算,12,按位取反举例,运算举例 1010,1101(0 xAD)0101,0010(0 x52)位运算模板对一个int类型的整数最后四位清零16位整数:a&0 xF032位整数:a&0 xFFF0可以使用:a&(int)0 xF,C语言程序设计-第9章 位运算,13,左移(Left Shift),运算规则i n把i各位全部向左移动n位最左端的n位被移出丢弃最右端的n位用0补齐用法若没有溢出,则左移n位相当于乘上2n运算速度比真正的乘法和幂运算快得多,C语言程序设计-第9章 位运算,14,左移举例,运算举例 1010,1101 3(101)0110,1000_溢出举例若左移后的数据超出表示范围,则发生溢出int i,j;i=0 x2431;j=i2;/*j=-0 x6F3C,溢出*/j=i3;/*j=0 x2188,溢出*/,C语言程序设计-第9章 位运算,15,右移(Right Shift),运算规则i n把i各位全部向右移动n位最右端的n位被移出丢弃最左端的n位用0补齐(逻辑右移)或最左端的n位用符号位补齐(算术右移)用法右移n位相当于除以2n,并舍去小数部分运算速度比真正的除法和幂运算快得多,C语言程序设计-第9章 位运算,16,右移举例,运算举例0101,1101 30000,1011(101)逻辑右移和算术右移int i,j;i=-0 x2431;j=i2;/*j=0 x36F3,逻辑右移*/j=i2;/*j=0 xF6F3,算术右移*/,C语言程序设计-第9章 位运算,17,不同长度数据位运算规则,两个操作数右端对齐短的数据左端用符号位补齐正数或无符号数左端用0补满负数左端用1补满两个操作数长度相等后再运算,C语言程序设计-第9章 位运算,18,位运算举例,将16进制短整数按二进制打印输出输入:F1E2输出:输入:13A5输出:,C语言程序设计-第9章 位运算,19,例1:将16进制数按二进制输出,include void main()int i;short a;scanf(%X,C语言程序设计-第9章 位运算,20,结束,The End,