第十二章位运算 学习目的与要求:1.理解什么是位运算 2.掌握位运算符和位运算符的运算规则。 3.学会处理二进制位的问题。 1.掌握位运算符和位运算符的运算规则 2.学会处理二进制位的问题 知识归纳 1.位运算与位运算符 (1)位运算:是指进行二进制位的运算。 (2)位运算符 运算符 运算符 按位与 按位取反 按位或 左移位 按位异或|> 右移位 (3)注意:位运算符只对整型、字符型数据有效 2.按位与(&) (1)运算规则:如果两个运算量相应二进制位都为1,则该位结果为1,否则为0。 (2)用途:要想将一个数某一位清零,就与一个数进行&运算,此数在该位取0 要想将一个数某一位保留下来,就与一个数进行&运算,此数在该位取1。 要想将一个数某些位保留下来,就与一个数进行&运算,此数在这些位全 为1,不想要的位全为0,即可 3.按位或(|) (1)运算规则:如果两个运算量相应二进制位有一个为1,则该位结果为1,否则为 (2)用途:与0进行按位或运算,各位数不变 与1进行按位或运算,均变为1。 4.按位异或(^) (1)运算规则:如果两个运算量相应二进制位异(即一位为1,一位为0)为1,同(即 两位均为1或均为0)为0。 (2)用途:与1相异或,翻转。 与0相异或,保留原值
第十二章 位 运 算 学习目的与要求:1. 理解什么是位运算。 2. 掌握位运算符和位运算符的运算规则。 3. 学会处理二进制位的问题。 重点: 1. 掌握位运算符和位运算符的运算规则。 2. 学会处理二进制位的问题。 知识归纳 1. 位运算与位运算符 (1) 位运算:是指进行二进制位的运算。 (2) 位运算符 运算符 含义 运算符 含义 & 按位与 ~ 按位取反 | 按位或 > 右移位 (3) 注意:位运算符只对整型、字符型数据有效。 2. 按位与( & ) (1) 运算规则:如果两个运算量相应二进制位都为 1 ,则该位结果为 1 ,否则为 0。 (2) 用途:要想将一个数某一位清零,就与一个数进行 & 运算,此数在该位取 0。 要想将一个数某一位保留下来,就与一个数进行 & 运算,此数在该位取 1。 要想将一个数某些位保留下来,就与一个数进行 & 运算,此数在这些位全 为 1,不想要的位全为 0,即可。 3. 按位或( | ) (1) 运算规则:如果两个运算量相应二进制位有一个为 1 ,则该位结果为 1 ,否则为 0。 (2) 用途 :与 0 进行按位或运算,各位数不变。 与 1 进行按位或运算,均变为 1。 4. 按位异或( ^ ): (1) 运算规则:如果两个运算量相应二进制位异( 即一位为 1 ,一位为 0)为 1 ,同( 即 两位均为 1 或均为 0)为 0。 (2) 用途 :与 1 相异或,翻转。 与 0 相异或,保留原值
第二部分¢语言程序设计同步训练 交换两个值,不用临时变量。 5.按位取反(~) (1)运算规则:对一个二进制数按位取反,即将0变1,1变0。 (2)用途:~1,高位全部为1,只末位为0,再与其他数字进行其他位运算 0,所有位全部为1,再与其他数字进行其他位运算 6.左移位(>) (1)运算规则:将一个数的各二进制位全部右移指定位;如a=a>2 低位右移后舍弃,高位补符号位:(即符号位为1,补1,符号位为0,补0) 所以,右移1位相当于该数除以2,右移2位相当于该数除以4。 (2)用途:常用来控制使一个数字迅速以2的倍数缩小 基础训练(A 、填空题 1.位运算是对运算量的 位进行运算。 2.C语言中,位运算符有 共六个。 3.位运算符连线 按位异或 按位与 按位取反 左移位 4.在六个位运算符中,只有是需要一个运算量的运算符 5.按位异或的运算规则是: 6.位运算符只对 和 数据类型有效。 7.有程序片段 int a=l, b=2 if(a printf("True!\n”); else printf("False! \n") 运行结果是: 、选择题 1.以下运算符中,优先级最高的是 C)&&
第二部分 C 语言程序设计同步训练 ·275· ·275· 交换两个值,不用临时变量。 5. 按位取反( ~ ) (1) 运算规则:对一个二进制数按位取反,即将 0 变 1 ,1 变 0。 (2) 用途 :~1 ,高位全部为 1 ,只末位为 0 ,再与其他数字进行其他位运算。 ~ 0 , 所有位全部为 1 ,再与其他数字进行其他位运算。 6. 左移位( > ) (1) 运算规则:将一个数的各二进制位全部右移指定位;如 a=a >> 2。 低位右移后舍弃,高位补符号位;(即符号位 为 1 ,补 1,符号位为 0,补 0) 所以,右移 1 位相当于该数除以 2,右移 2 位相当于该数除以 4。 (2) 用途 :常用来控制使一个数字迅速以 2 的倍数缩小。 基础训练(A) 一、填空题 1. 位运算是对运算量的_____________位进行运算。 2. C 语言中,位运算符有_____、______、______、____、>> 、 <<,共六个。 3. 位运算符连线: ~ 按位异或 << 按位与 & 按位取反 ^ 左移位 4. 在六个位运算符中,只有_________是需要一个运算量的运算符。 5. 按位异或的运算规则是:_____________________________________________。 6. 位运算符只对_______和___________数据类型有效。 7. 有程序片段: int a=1,b=2; if(a&b) printf(“True!\n”); else printf(“False!\n”); 运行结果是:____________________ 二、选择题 1. 以下运算符中,优先级最高的是______________。 A)~ , B) | C) && D) *
C语言程序设计上机指导与同步训练 2.表达式0x13&0x17的值是 A)0x17 B)0x13 D) Oxec 3.表达式0x1310x17的值是 A)0xl7 C)Oxf D)Oxe 4.设inta=04,b;则执行b=a main() i int a=0 char c=’A printf(”oln",~a) printf(”告oln",a&c) printf("o\n”,alc) 276
·276· C 语言程序设计上机指导与同步训练 ·276· 2. 表达式 0x13&0x17 的值是____________。 A) 0x17 B ) 0x13 C) 0xf8 D) 0xec 3. 表达式 0x13 | 0x17 的值是____________。 A) 0x17 B )0x13 C) 0xf8 D) 0xec 4. 设 int a=04 , b ; 则执行 b=a main() { int a=0234; char c =’A’; printf(“ %o\n”,~a); printf(“%o\n”, a&c); printf(“%o\n”,a|c); }
第二部分¢语言程序设计同步训练 A)177543 B)177 C)175437 D)17543 )0 D)24 335 C)53 三、编程题 编程实现输入任意两个字符,不通过第3个变量,交换两个字符,然后输出。 链接二级考试 选择题 1.整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是 C)x&y 2.以下程序的输出结果是()。 I char x=040 printf("o\n", x<<1) 2002年4月) 3.有以下程序 main() I unsigned char a,b,c printf("旨dd\n”,b,c) 程序运行后的输出结果是()。 A)-1112 B)-6-13 C)1224 D)1122 (2002年9月) 4.设char型变量x中的值为10100111则表达式(2+x(~3)的值是( A)10l01001 B)10101000 C)l1ll01D)01010101 (2003年4月) 填空题 设二进制数a是00101101,若想通过异或运算ab使a的高4位取反,低4位不变, 则二进制数b应是 (1996年4月)
第二部分 C 语言程序设计同步训练 ·277· ·277· A) 177543 B) 177 C) 175437 D) 17543 A) 0 , B) 1 C) 163 D) 24 A) 35, B) 335 C) 53 D) 533 三、编程题 编程实现输入任意两个字符,不通过第 3 个变量,交换两个字符,然后输出。 链接二级考试 一、选择题 1. 整型变量 x 和 y 的值相等、且为非 0 值,则以下选项中,结果为零的表达式是 ( )。 A) x || y B) x | y C) x & y D) x ^ y (2001 年 9 月) 2. 以下程序的输出结果是( )。 main() { char x=040; printf("%0\n",x<<1); } A) 100 B) 80 C) 64 D) 32 (2002 年 4 月) 3. 有以下程序 main() { unsigned char a,b,c; a=0x3; b=a|0x8; c=b<<1; printf(“%d%d\n”,b,c); } 程序运行后的输出结果是( )。 A) –11 12 B) –6 –13 C) 12 24 D) 11 22 ( 2002 年 9 月) 4. 设 char 型变量 x 中的值为 10100111,则表达式(2+x)^(~3)的值是( )。 A) 10101001 B) 10101000 C) 11111101 D) 01010101 (2003 年 4 月) 二、填空题 设二进制数 a 是 00101101,若想通过异或运算 a^b 使 a 的高 4 位取反,低 4 位不变, 则二进制数 b 应是 _____________。 (1996 年 4 月)