2-1假设变量x的位数为n(n>=8),x的最低有效字节不变,其余各位全变为0,则对应C语言表达式为。
A.x | ~ 0xFF
B.x ^ 0xFF
C.x | 0xFF
D.x & 0xFF
2-2 假定变量i、f的数据类型分别是int、float。已知i=12345,f=1.2345e3,则在一个32位机器中执行下列表达式时,结果为“假”的是
A.f==(float)(double)f
B.i==(int)(double)i
C.f(float)(int)f==
D.i==(int)(float)i
2-3 假定某计算机按字节编址,采用小端方式,有一个float型变量x的地址为0xffffc000,x=12345678H,则在内存单元0xffffc001中存放的内容是
A.00110100B
B.0101B
C.0001001000110100B
D.01010110B
2-4 已知 float 型变量用 IEEE 754 单精度浮点数格式表示。若 float 型变量 x 的机器数为 8020 0000H,则 x 的值是:
A. − 2 − 128 −2^{−128} −2−128
B. − 1.01 × 2 − 127 −1.01×2^{−127} −1.01×2−127
C. − 1.01 × 2 − 126 −1.01×2^{−126} −1.01×2−126
D.非数(NaN)
2-5 下列数值中,不能用 IEEE 754 浮点格式精确表示的是:
A.1.2
B.1.25
C.2.0
D.2.5
2-6 -0.4375 的 IEEE 754 单精度浮点数表示为:
A.BEE0 0000H
B.BF60 0000H
C.BF70 0000H
D.C0E0 0000H
2-7 两个4位二进制数分别为 1101、0111,则这两个数码距为( )。
A.1
B.2
C.3
D.4
2-8 有以下由1个字节组成的合法编码集{0xA9,0xC7,0xDF,0xBE},该编码集的最小码距是( )。
A.1
B.2
C.3
D.4
E.5
F.6
4-1
32位IEEE 754浮点数为41AB8000H, 则对应的真值的小数部分的数值为 4375
。(注:只需要填小数点后面的阿拉伯数字,0和小数点均不需要填写)
4-2
假定编译器规定int和short类型长度分别为32位和16位,执行下列C语言语句:
unsigned short x = -865365530;
unsigned int uy = x;
int y = x;
那么,请回答:
(1)得到x的机器数为 91e6
H。(填写十六进制数,字母全部大写或者全部小写,注意补满位数)
(2)uy/y = 1
。(填写阿拉伯十进制数,只填写整数部分,小数部分直接舍弃,不需要作四舍五入)
(3)y/uy = 1
。(填写阿拉伯十进制数,只填写整数部分,小数部分直接舍弃,不需要作四舍五入)
4-3
(1)若浮点数x的32位IEEE754标准的十六进制存储格式为(C2F70000)H,其对应的十进制真值为 -123.5
。
(2)若浮点数为5.625,其对应的32位IEEE754标准的十六进制存储格式为0x 40B40000
。(十六进制字母需用大写表示,小写字母不得分)
4-4
已知int数据类型为32位,当int x = 0x 80000000
时,能使得C程序逻辑表达式(x<=0)&&(x-1>=0)的值为TRUE。(答案要求使用十六进制表示,字母用大写表示)
4-5
码长为八位时,-108的原码是 11101100
、反码是 10010011
、补码是 10010100
、移码是 00010100
。(填写成8位二进制数)
4-6
假定编译器规定int和short类型长度分别为32位和16位,执行下列C语言语句:unsigned short x=65531;unsigned int y=x;得到y的机器数为 0000FFFFB
H
4-7
由4个“1”和4个“0”组成的8位二进制补码,能表示的最大整数是 120
(填写十进制数)
4-8
由4个“1”和4个“0”组成的8位二进制补码,能表示的最小整数是 -121
(填写十进制数)
5-1 利用C语言程序输出某些特定的数字
这是一道利用C语言程序输出某些特定的数字,以复习计算机组成原理中常见的概念。
(1)输出整数a的补码(十六进制,前缀带0x;若a的值为0则直接输出0);
(2)输出单精度浮点数对应的IEEE754标准编码十进制数;
(3)保留整数c第2位到第7位的结果,其他位全部置0,输出变换后的十进制数(设最低位为第1位);
(4)将整数c第2位到第7位全部置1,其他位全部保留,输出变换后的十进制数(设最低位为第1位);
(5)判断a乘以c的符号,如果是乘积为正则输出0;如果是乘积为负则输出1。
表2 移位运算符
#include
int main()
{
int a;
float b;
int c ;
while(~scanf("%d %f %x",&a,&b,&c))
{
printf("%#x\n",a);
printf("%d\n",*(int*)& b);
printf("%d\n", 0x7E& c);
printf("%d\n", 0x7E| c);
printf("%d\n",(a^c) >>31&0x1 );
}
return 0;
}
输入样例
-1 11.375 0x8fa
输出样例
0xffffffff
1094057984
122
2302
1
5-2 破译情报
2021年7月1日是我国第100个建党节,也是“两个一百年”中的第一个一百年——到建党一百年时,使国民经济更加发展,各项制度更加完善。
然而中国共产党于1921年7月23日成立后,在反动军阀政府的残暴统治之下,只能处于秘密状态,没有公开进行活动的环境,远程的秘密情报需要通过电报+“密码本”的方式才能完成高效加密传递。
下面的“数字密码本”是根据七段数码管(共阴极)的原理制成的,现在亟需你发现其中的规律,将密码本中所有内容补充完成,以获得前方破获的敌军电话重要情报。
#include
char findmima(short i)
{
switch(i)
{
case 0x3f:return '0';/*0x3f是'0'的密码,下同*/
case 0x06:return '1';
case 0x5b:return '2';
case 0x4f:return '3';
case 0x66:return '4';
case 0x6d:return '5';
case 0x7d:return '6';
case 0x07:return '7';
case 0x7f:return '8';
case 0x6f:return '9';
}
return 0;
}
int main()
{
int i;
short telephone[]={0x06,'5'(该处替换成'5'的密码),0x4f,'2'(该处替换成'2'的密码),0x7d,'8'(该处替换成'8'的密码),0x6f,'2'(该处替换成'2'的密码),0x6f,0x07,0x4f};
short size=sizeof(telephone)/sizeof(telephone[0]);
for( i = 0 ; i < size ; i++)
{
printf("%c",findmima(telephone[i]));
}
return 0;
}