《中科大C语言程序设计.ppt》由会员分享,可在线阅读,更多相关《中科大C语言程序设计.ppt(20页珍藏版)》请在金锄头文库上搜索。
1、白 雪 飞中国科学技术大学电子科学与技术系Dept. of Elec. Sci. & Tech., USTCFall, 2003第第9章章 位位 运运 算算C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算2 2目 录l位运算和位运算符l位运算举例C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算3 3位运算l按二进制位进行运算l位运算的运算对象是二进制的位l位运算速度快,效率高,节省存储空间l只能对整型数据(包括字符型)进行位运算l负数以补码形式参与运算l注意与逻辑运算区别C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算4 4位运算符
2、(Bitwise Operators)运算符名称举例优先级按位取反flag(高)(算术运算符)左移a 右移b 3(关系运算符)&按位与flag & 0x37按位异或flag 0xC4|按位或flag | 0x5A(低)(赋值运算符)C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算5 5按位与 (Bitwise AND)l运算规则n0 & 0 = 0;n0 & 1 = 0;n1 & 0 = 0;n1 & 1 = 1;l用法n按位清零n保留某些指定位C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算6 6按位与举例l运算举例 1010,1101 (0xAD)&
3、 0110,1001 (0x69) 0010,1001 (0x29)l按位清零、保留xxxx,xxxx_& 0110,0010 (0x62)0xx0,00x0_C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算7 7按位或 (Bitwise Inclusive OR)l运算规则n0 | 0 = 0;n0 | 1 = 1;n1 | 0 = 1;n1 | 1 = 1;l用法n按位置一C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算8 8按位或举例l运算举例 1010,1101 (0xAD)| 0110,1001 (0x69) 1110,1101 (0xED)l
4、按位置一xxxx,xxxx_| 0110,0010 (0x62)x11x,xx1x_C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算9 9按位异或 (Bitwise Exclusive OR, XOR)l运算规则n0 0 = 0;n0 1 = 1;n1 0 = 1;n1 1 = 0;l说明n相“异”则为1,相“同”则为0n相当于按位且无进位的加法C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算1010按位异或用法举例l特定位翻转 1010,1101 (0xAD) 0110,1001 (0x69) 1100,0100 (0xC4)l与0相异或,保持原值不变
5、l与自身相异或,则全部位清零l交换两个整数值na=ab; b=ba; a=ab;C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算1111按位取反 (Ones Complement)l运算规则n 0 = 1;n 1 = 0;l用法n所有位翻转n获得适用于不同系统的位运算模板C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算1212按位取反举例l运算举例 1010,1101 (0xAD) 0101,0010 (0x52)l位运算模板n对一个int类型的整数最后四位清零16位整数: a & 0xF032位整数: a & 0xFFF0可以使用: a & (int)
6、0xFC C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算1313左移 (Left Shift)l运算规则ni nn把i各位全部向左移动n位n最左端的n位被移出丢弃n最右端的n位用0补齐l用法n若没有溢出,则左移n位相当于乘上2nn运算速度比真正的乘法和幂运算快得多C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算1414左移举例l运算举例 1010,1101 3(101)0110,1000_l溢出举例n若左移后的数据超出表示范围,则发生溢出nint i, j; i = 0x2431;j = i2; /* j=-0x6F3C, 溢出 */j = i nn把i各
7、位全部向右移动n位n最右端的n位被移出丢弃n最左端的n位用0补齐(逻辑右移)n或最左端的n位用符号位补齐(算术右移)l用法n右移n位相当于除以2n,并舍去小数部分n运算速度比真正的除法和幂运算快得多C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算1616右移举例l运算举例0101,1101 30000,1011(101)l逻辑右移和算术右移nint i, j; i=-0x2431;j=i2; /* j=0x36F3, 逻辑右移 */j=i2; /* j=0xF6F3, 算术右移 */C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算1717不同长度数据位运
8、算规则l两个操作数右端对齐l短的数据左端用符号位补齐l正数或无符号数左端用0补满l负数左端用1补满l两个操作数长度相等后再运算C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算1818位运算举例l将16进制短整数按二进制打印输出输入:F1E2输出:1111000111100010输入:13A5输出:0001001110100101C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算1919例1:将16进制数按二进制输出include void main()int i;short a;scanf(%X, &a);for (i=15;i=0;i-)printf(%1d, a&1i?1:0);C C语言程序设计语言程序设计 - - 第第9 9章章 位运算位运算2020结束The End