第9章位运算 白雪飞 baixfaustc. edu.cn 中国科学技术大学电子科学与技术系 Dept of Elec. Sci. Tech, USTC Fal22003
白 雪 飞 baixf@ustc.edu.cn 中国科学技术大学电子科学与技术系 Dept. of Elec. Sci. & Tech., USTC Fall, 2003 第9章 位 运 算
目录 位运算和位运算符 ●位运算举例 C语言程序设计-第9章位运算2
C语言程序设计 - 第9章 位运算 2 目 录 ⚫ 位运算和位运算符 ⚫ 位运算举例
位运算 。按二进制位进行运算 位运算的运算对象是二进制的位 位运算速度快,效率高,节省存储空间 只能对整型数据(包括字符型)进行位运算 负数以补码形式参与运算 注意与逻辑运算区别 C语言程序设计-第9章位运算3
C语言程序设计 - 第9章 位运算 3 位运算 ⚫ 按二进制位进行运算 ⚫ 位运算的运算对象是二进制的位 ⚫ 位运算速度快,效率高,节省存储空间 ⚫ 只能对整型数据(包括字符型)进行位运算 ⚫ 负数以补码形式参与运算 ⚫ 注意与逻辑运算区别
位运算符( Bitwise Operators 运算符名称 举例 优先级 按位取反 wflag (高) (算术运算符) >3 (关系运算符) 6按位与1aq60x37 按位异或|f1ag^0xc4 按位或1ag10x5A (低) (赋值运算符) C语言程序设计-第9章位运算4
C语言程序设计 - 第9章 位运算 4 位运算符 (Bitwise Operators) 运算符 名称 举例 优先级 ~ 按位取反 ~flag (高) (算术运算符) > 右移 b >> 3 (关系运算符) & 按位与 flag & 0x37 ^ 按位异或 flag ^ 0xC4 | 按位或 flag | 0x5A (低) (赋值运算符)
按位与( Bitwise and) 运算规则 0&0=0; ■0&1 0 1&0=0 1&1=1; 用法 按位清零 ■保留某些指定位 C语言程序设计-第9章位运算5
C语言程序设计 - 第9章 位运算 5 按位与 (Bitwise AND) ⚫ 运算规则 ◼ 0 & 0 = 0; ◼ 0 & 1 = 0; ◼ 1 & 0 = 0; ◼ 1 & 1 = 1; ⚫ 用法 ◼ 按位清零 ◼ 保留某些指定位
按位与举例 运算举例 1010,1101(0xAD) 0110,1001(0x69) 0010,1001(0x29) ●按位清零、保留 XXXX 0110,0010(0x62) 0x0,00x0 C语言程序设计-第9章位运算6
C语言程序设计 - 第9章 位运算 6 按位与举例 ⚫ 运算举例 1010,1101 (0xAD) & 0110,1001 (0x69) 0010,1001 (0x29) ⚫ 按位清零、保留 xxxx,xxxx_____ & 0110,0010 (0x62) 0xx0,00x0_____
按位或( Bitwise inclusive or) 运算规则 0011 0101 0111 用法 按位置 C语言程序设计-第9章位运算7
C语言程序设计 - 第9章 位运算 7 按位或 (Bitwise Inclusive OR) ⚫ 运算规则 ◼ 0 | 0 = 0; ◼ 0 | 1 = 1; ◼ 1 | 0 = 1; ◼ 1 | 1 = 1; ⚫ 用法 ◼ 按位置一
按位或举例 运算举例 1010,1101(0xAD) 0110,1001(0x69) 1110,1101(0xED) ●按位置 XXXX 0110,0010(0x62) x11x xxix C语言程序设计-第9章位运算8
C语言程序设计 - 第9章 位运算 8 按位或举例 ⚫ 运算举例 1010,1101 (0xAD) | 0110,1001 (0x69) 1110,1101 (0xED) ⚫ 按位置一 xxxx,xxxx_____ | 0110,0010 (0x62) x11x,xx1x_____
按位异或( Bitwise exclusive or,XOR) 运算规则 0 0011 0101 0 说明 相“异”则为1,相“同”则为0 相当于按位且无进位的加法 C语言程序设计-第9章位运算9
C语言程序设计 - 第9章 位运算 9 按位异或 (Bitwise Exclusive OR, XOR) ⚫ 运算规则 ◼ 0 ^ 0 = 0; ◼ 0 ^ 1 = 1; ◼ 1 ^ 0 = 1; ◼ 1 ^ 1 = 0; ⚫ 说明 ◼ 相“异”则为1,相“同”则为0 ◼ 相当于按位且无进位的加法
按位异或用法举例 特定位翻转 1010;1101(0xAD) 0110,1001(0x69) 1100,0100(0xC4) 与0相异或,保持原值不变 与自身相异或,则全部位清零 交换两个整数值 ■a=a^b;b=b^a;a=a^b; C语言程序设计-第9章位运算10
C语言程序设计 - 第9章 位运算 10 按位异或用法举例 ⚫ 特定位翻转 1010,1101 (0xAD) ^ 0110,1001 (0x69) 1100,0100 (0xC4) ⚫ 与0相异或,保持原值不变 ⚫ 与自身相异或,则全部位清零 ⚫ 交换两个整数值 ◼ a=a^b; b=b^a; a=a^b;