习题10和参考解答
1)选择题
(1)以下运算符中优先级最低的是( ),运算符中优先级最高的是( )。
A.&& B.& C.|| D.|
【答案】C B
【解析】本题主要考查C语言运算符的优先级关系。
(2)表达式“0x13&0x17”的值是( )。
A.0x17 B.0x13 C.0xf8 D.0xec
【答案】B
【解析】将0x13和0x17转换成对应的二进制数后按位进行与运算,再把结果转换成八进制数,计算的结果为0x13。
(3)若x=2,y=3,则x&y的结果是( )。
A.0 B.2 C.3 D.5
【答案】B
【解析】x对应的二进制位为0010,y对应的二进制位为0011,两者按位与后的结果为0010,故对应的十进制数为2。
(4)表达式 0x13 | 0x17的值是( )。
A.0x17 B.0x13 C.0xf8 D.0xec
【答案】A
【解析】将0x13和0x17转换成对应的二进制数后,按位进行或运算,再把结果转成八进制数,计算的结果为0x17。
(5)若有定义“int a=4,b;”,则执行“b=a<<2;”后,b的结果是( )。
A.4 B.8 C.16 D.32
【答案】C
【解析】对于移位运算,左移一位相当于原数乘以2,右移一位相当于原数除以2。
(6)运算符<<、sizeof、^、&=按优先级由高到低的正确排列次序是( )。
A.sizeof、&=、<<、^ B.sizeof、<<、^、&=
C.^、<<、sizeof、&= D.<<、^、&=、sizeof
【答案】B
【解析】本题主要考查C语言运算符的优先级关系。
(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
【答案】A A
【解析】在一个表达式中出现^和<<运算符时,应先计算<<再计算^。
(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”
【答案】C
【解析】“a!=b”是一个关系表达式,不等价于“a=a!B”。
(9)以下运算符中优先级最高的是( )。
A.~ B.| C.&& D.*
【答案】D
【解析】主要考查C语言运算符的优先级关系。
(10)在位运算中运算量每右移动一位,其结果相当于( )。
A.运算量乘以2 B.运算量除以2
C.运算量除以4 D.运算量乘以4
【答案】B
【解析】对于移位运算,左移一位相当于原数乘以2,右移一位相当于原数除以2。
(11)表达式“~0x13”的值是( )。
A.0xFFEC B.0xFF71 C.0xFF68 D.0xFF17
【答案】A
运算符优先级按从高到低排列
【解析】0x13的二进制位为0000000000010011,按位取反后得111111*********0,对应的十六进制数为0xFFEC。
(12)请选择以下程序的执行结果。
①( ),②( ),③( )。
#include <stdio.h>
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
②A.0 B.1 C.163 D.24
③A.35 B.335 C.53 D.533
【答案】A A B
【解析】本题主要考查位运算符的运算量类型和基本的位运算操作。
(13)以下程序的运行结果是( )。
#include <stdio.h>
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
【答案】D
【解析】a对应的二进制数为011,与0x8进行按位或运算后,b的值为1011,对应十进制数为11,左移一位相当于原数乘以2,故c的值为22。
(14)以下程序的运行结果是( )。
#include <stdio.h>
void main()
{
char x=040;
printf("%o\n",x<<1);
}
A.100 B.80 C. 64 D.32
【答案】A
【解析】八进制40左移一位后值变为十进制数64,对应的八进制数为100。
(15)整型变量x和y的值相等,且为非0值,则以下选项结果为零的表达式是( )。
A.x || y B.x | y C.x & y D.x ^ y
【答案】D
【解析】异或操作的运算规则为相同为零相异为1,故选D。
2)填空题
(1)位运算是对运算量的_____________位进行运算。
【答案】二进制
(2)位运算符只对_______和___________数据类型有效。
【答案】整型 字符型
(3)在6个位运算符中,只有_________是需要一个运算量的运算符。
【答案】~
(4)“按位异或”的运算规则是:________________________________________。
【答案】相同为零,相异为1
(5)C语言中的位运算符有_____、______、______、____、>> 和<<共6个。
【答案】& | ~ ^
(6)以下程序段的输出结果是___________。
int x = -1;
x= x | 0377;
printf("%d,%x\n",x,x );
【答案】-1,ffffffff
(7)设有一个整数a,若要通过“异或”运算“a^b”使a的高8位翻转,低8位不变,则b的八进制数形式是:_______。
【答案】177400
(8)设二进制数a是00101101,若想通过“异或”运算“a^b”使a的高4位取反,低4位不变,则二进制数b应是_____________。
【答案】11110000
(9)设有一个整数a,若要通过“a&b”运算屏蔽掉a中的其他位,而只保留第2和第8位,则b的八进制数形式是__________________。
【答案】202
(10)如果想使一个数a的低4位全改为1,需要a与____________进行按位或运算。
【答案】15
3)编程题
(1)设计一个函数。当给出一个数的原码时,能得到该数的补码。
【参考源程序】
#include <stdio.h>
int main()
{
unsigned int a;
unsigned int getbits(unsigned);
printf(“\ninput an octal number:”);
scanf(“%d”,&a);
printf(“result:%o\n”,getbits(a));
return 0;
}
unsigned int getbits(unsigned value)
{
unsigned int z;
z=value&0100000;
if(z==0100000)
z=~value+1;
else
z=value;
return z;
}
(2)编写一个函数,用它测定一个整数的最高位是0还是1,若是0,则输出“正数”,否则输出“负数”。
【参考源程序】
#include <stdio.h>
int test(char);
int main()
{
char a;
printf(“please input a number:”);
scanf(“%d”,&a);
if(test(a))
printf(“\npositive number”);
else
printf(“\nnegative”);
return 0;
}
int test(char n)
{
if(n&10000000)
return 0;
else
return 1;
}
(3)编写一个函数getbits(),从一个16位单元中取出某几位,即该几位保留原值,其余位为0,位数由输入者设定。
【参考源程序】
#include <stdio.h>
int getbits(unsigned value,int n1,int n2)
{
unsigned int z;
z=~0;
z=(z>>n1)&(z<<(16-n2));
z=value&z;
z=z>>(16-n2);
return z;
}
int main()
{
unsigned int a;
int n1,n2;
printf(inpt an octal number;);
scanf(“%o”,&a);
printf(“input n1,n2:”);
scanf(“%d%d”,&n1,&n2);
printf(“result:%0\n”,getbits(a,n1,n2));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论