第十二章 位 运 算
学习目的与要求: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相异或,保留原值。
第二部分 C语言程序设计同步训练
·275·
·275·
交换两个值,不用临时变量。
5,按位取反( ~ )
(1) 运算规则:对一个二进制数按位取反,即将0变1,1变0。
(2) 用途,~1,高位全部为1,只末位为 0,再与其他数字进行其他位运算。
~ 0,所有位全部为1,再与其他数字进行其他位运算。
6,左移位( << )
(1) 运算规则:将一个数的各二进制位全部左移指定位;如 a=a << 2 ;
高位左移后舍弃,低位补0。
所以,左移1位相当于该数乘以2,左移2位相当于该数乘以4,但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。
(2) 用途,常用来控制使一个数字迅速以2的倍数扩大。
7,右移位( >> )
(1) 运算规则:将一个数的各二进制位全部右移指定位;如 a=a >> 2。
低位右移后舍弃,高位补符号位;(即符号位 为1,补1,符号位为0,补0)
所以,右移1位相当于该数除以2,右移2位相当于该数除以4。
(2) 用途,常用来控制使一个数字迅速以2的倍数缩小。
基础训练(A)
一、填空g20076
1,位运算是对运算量的_____________位进行运算。
2,Cg16833g16340中,位运算符有_____、______、______、____、>>,<<,g1861g1857个。
3,位运算符g17842g13459,
~ 按位异或
<< 按位与
& 按位取反
^ 左移位
4,在g1857个位运算符中,只有_________是g19668要一个运算量的运算符。
5,按位异或的运算规则是:_____________________________________________。
6,位运算符只对_______g2656___________数据g12879型有效。
7,有g12255g5219g10267g8585,
int a=1,b=2;
if(a&b) printf(“True!\n”);
else printf(“False!\n”);
运行结果是:____________________
二、g17885g6333g20076
1,以下运算符中,g1260g1820g13435g7380高的是______________。
A)~,B) | C) & D) *
C语言程序设计上机指导与同步训练
·276·
·276·
2,g15932g17810g5347 0x13&0x17的值是____________。
A) 0x17 B ) 0x13 C) 0xf8 D) 0xec
3,g15932g17810g5347 0x13 | 0x17的值是____________。
A) 0x17 B )0x13 C) 0xf8 D) 0xec
4,g16786int a=04,b ; 则g6203行b=a<<2; 后,b的结果是:______________。
A) 4 B) 8 C) 16 D) 32
5,在位运算中,运算量g8611右移g2172一位,其结果相当于________。
A) 运算量乘以2 B) 运算量除以2
C) 运算量除以4 D) 运算量乘以4
能力提高(B)
一、填空g20076
1,以下g12255g5219g8585的g17767出结果是___________。
int x = -1;
x= x | 0377;
printf(“%d,%o\n”,x,x );
2,g16786有一个整数a,b ; g14521要g17902g17819a&b 运算g4643g15121g6493a中的其他位,只保留g125442g26568位,
则b的g1855进制数是:__________________。
3,如果想使一个数a的低4位全g6925为1,g19668要a与____________进行按位或运算。
4,g16786有一个整数a,b ; g14521要g17902g17819a ^ b运算,使低4位翻转,高4位不变,则b的g1855进制数是:__________________。
5,g16786有一个整数a,b ; g14521要g17902g17819a ^ b运算,使高4位翻转,低4位不变,则b的g1855进制数是:__________________。
二、g17885g6333g20076
1,g16786有以下g16833g2489,则c的二进制数是______________;g2325进制数是______________。
char a=3,b=6,c;
c=a^b<<2;
A) 00011011 B) 00010100 C) 00011100 D) 00011000
A) 27,B) 20 C) 28 D) 24
2,g15932g17810g5347~0x13的值是___________。
A) 0xFFEc B) 0xFF71 C) 0xFF68 D) 0xFF17
3,g16843g17885g6333以下g12255g5219的g6203行结果:________、_______、_______
#include <stdio.h>
main()
{ int a=0234;
char c =’A’;
printf(,%o\n”,~a);
printf(“%o\n”,a&c);
printf(“%o\n”,a|c);
}
第二部分 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
g989、g13546g12255g20076
g13546g12255g4466g10628g17767g1849g1231意两个字符,不g17902g17819g125443个变量,交换两个字符,g9994后g17767出。
链接二级考试
一、g17885g6333g20076
1,整型变量 x g2656 y 的值相g12573、g1000为g19762 0 值,则以下g17885g20045中,结果为零的g15932g17810g5347是
( )。
A) x || y B) x | y C) x & y D) x ^ y
(2001g51929g7388)
2,以下g12255g5219的g17767出结果是( )。
main()
{ char x=040;
printf("%0\n",x<<1);
}
A) 100 B) 80 C) 64 D) 32
(2002g51924g7388)
3,有以下g12255g5219
main()
{ unsigned char a,b,c;
a=0x3; b=a|0x8; c=b<<1;
printf(“%d%d\n”,b,c);
}
g12255g5219运行后的g17767出结果是( )。
A) –11 12 B) –6 –13 C) 12 24 D) 11 22
( 2002g51929g7388)
4,g16786char型变量x中的值为10100111,则g15932g17810g5347(2+x)^(g7943)的值是( )。
A) 10101001 B) 10101000 C) 11111101 D) 01010101
(2003g51924g7388)
二、填空g20076
g16786二进制数a是00101101,g14521想g17902g17819异或运算a^b使a的高4位取反,低4位不变,
则二进制数b应是 _____________。g3
(1996g51924g7388)