学习情境八位运算习题
一、填空题
1.位运算是对运算量的_____________位进行运算。
2.位运算符只对_______和___________数据类型有效。
3.位运算符连线:
~ 按位异或
<< 按位与
& 按位取反
^ 左移位
4.在六个位运算符中,只有_________是需要一个运算量的运算符。
5.按位异或的运算规则是:________________________________________。
6.C语言中,位运算符有_____、______、______、____、>> 、<<,共六个。
7.以下程序段的输出结果是___________。
int x = -1;
x= x | 0377;
printf(“%d,%o\n”,x, x );
8.设有一个整数a , b ; 若要通过a ^ b运算,使a的高8位翻转,低8位不变,则b 的八进制数是:__________________。
9.设二进制数a是00101101,若想通过异或运算a^b使a的高4位取反,低4位不变,则二进制数b应是_____________ 。
10.设有一个整数a , b ; 若要通过a&b 运算屏蔽掉a中的其他位,只保留第2和8位,则b的八进制数是:__________________。
11.如果想使一个数a的低4位全改为1 ,需要a与____________进行按位或运算。
二、选择题
1.以下运算符中优先级最低的是(),运算符中优先级最高的是()。
A.&& B.& C.|| D.|
2.表达式0x13&0x17的值是()。
A.0x17 B.0x13 C.0xf8 D.0xec
3.若x=2,y=3,则x&y的结果是()。
A.0 B.2 C.3 D.5
4.表达式0x13 | 0x17的值是()。
A.0x17 B.0x13 C.0xf8 D.0xec
5.设int a=4 , b ; 则执行b=a<<2; 后,b的结果是:()。
A.4 B.8 C.16 D.32
6.若有运算符<<,sizeof,^,&=则他们按优先级由高到低的正确排列次序是()。
A.sizeof,&=,<<,^ B.sizeof,<<,^,&=
C.^,<<,sizeof,&= D.<<,^,&=,sizeof
7.设有以下语句,则c的二进制数是();十进制数是:()。
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
8.以下叙述中不正确的是()。
A.表达式a&=b等价于a=a&b
B.表达式a|=b等价于a=a|b
C.表达式a!=b等价于a=a!b
D.表达式a^=b等价于a=a^b
9.以下运算符中,优先级最高的是()。
A.~ B.| C.&& D.*
10.在位运算中,运算量每右移动一位,其结果相当于()。
A.运算量乘以2 B.运算量除以2
C.运算量除以4 D.运算量乘以4
11.表达式~0x13的值是()。
A.0xFFEc B.0xFF71 C.0xFF68 D.0xFF17
12.请选择以下程序的执行结果:()、()、()。
#include <stdio.h>
main()
{ int a=0234;
char c =’A’;
printf(“ %o\n”,~a);
prin tf(“%o\n”, a&c);
printf(“%o\n”,a|c);
A.177543 B.177 C.175437 D.17543
A.0 B. 1 C.163 D.24
A.35 B.335 C.53 D.533
13.有以下程序
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
14.以下程序的输出结果是()。
main()
{ char x=040;
printf("%o\n",x<<1);
}
A.100 B.80 C.64 D.32
15.整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是()。
A.x || y B.x | y C.x & y D.x ^ y
16.设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是()。
A.10101001 B.10101000 C.11111101 D.01010101 三、编程题
1.设计一个函数。
当给出一个数的原码,能得到该数的补码。
2.取一个整数最高端的3个二进制位。
3.编写一个函数getbits,从一个16位单元中取出某几位(即该几位保留原值,其余为0),位数由输入者定。