本人做题时脑子不太清醒
如有错误欢迎指正。
1.将下列数据转换为二进制数据
(
A
7.
D
3
)
H
,
(
45.23
)
o
,
(
35.75
)
10
(A7.D3)_H,(45.23)_o,(35.75)_{10}
(A7.D3)H,(45.23)o,(35.75)10
【解析】
(
A
7.
D
3
)
H
=
(
10100111.11010011
)
2
(A7.D3)_H=(1010 0111.1101 0011)_2
(A7.D3)H=(10100111.11010011)2
(
45.23
)
o
=
(
100101.010011
)
2
(45.23)_o=(100 101.010 011)_2
(45.23)o=(100101.010011)2
(
35.75
)
10
=
100011.11
)
2
(35.75)_{10}=100011.11)_2
(35.75)10=100011.11)2
2.(1)将下列数据从小到大排列
(
11
)
H
,
(
32
)
10
,
(
17
)
O
,
(
10111
)
2
,
(
10010110
)
B
C
D
(11)_H,(32)_{10},(17)_O,(10111)_2,(10010110)_{BCD}
(11)H,(32)10,(17)O,(10111)2,(10010110)BCD
(2)如果某单精度数、某原码、某补码、某移码的32位机器数均为0xF0000000,这些数从大到小的顺序是。
【答案】
(1)
(
17
)
O
<
(
11
)
H
<
(
10111
)
2
<
(
32
)
10
<
(
10010110
)
B
C
D
(17)_O<(11)_H<(10111)_2<(32)_{10}<(10010110)_{BCD}
(17)O<(11)H<(10111)2<(32)10<(10010110)BCD
(2)移码>补码>原码>单精度浮点数
【解析】
(1)
(
11
)
H
=
(
17
)
10
(11)_H=(17)_{10}
(11)H=(17)10
(
32
)
10
=
(
32
)
10
(32)_{10}=(32)_{10}
(32)10=(32)10
(
17
)
O
=
(
15
)
10
(17)_O=(15)_{10}
(17)O=(15)10
(
10111
)
2
=
(
2
4
+
2
2
+
2
1
+
2
0
)
10
=
(
23
)
10
(10111)_2=(2^4+2^2+2^1+2^0)_{10}=(23)_{10}
(10111)2=(24+22+21+20)10=(23)10
(
10010110
)
B
C
D
=
(
96
)
10
(10010110)_{BCD}=(96)_{10}
(10010110)BCD=(96)10
(2)
(
0
x
F
0000000
)
H
=
(
11110000...0000
)
2
(0xF0000000)_H=(1111 0000...0000)_2
(0xF0000000)H=(11110000...0000)2
原码:
(
11110000...0000
)
2
是
负
数
,
且
绝
对
值
>
2
31
(1111 0000...0000)_2是负数,且绝对值>2^{31}
(11110000...0000)2是负数,且绝对值>231
补码:
(
10010000...000
)
2
(
原
)
是
负
数
,
且
绝
对
值
比
原
码
小
(1001 0000...000)_2(原)是负数,且绝对值比原码小
(10010000...000)2(原)是负数,且绝对值比原码小
移码:
(
01110000...000
)
2
是
正
数
,
最
大
(0111 0000...000)_2是正数,最大
(01110000...000)2是正数,最大
单精度浮点数:
E
=
128
+
64
+
32
,
e
=
97
,
绝
对
值
>
2
31
E=128+64+32,e=97,绝对值>2^{31}
E=128+64+32,e=97,绝对值>231
所以:移码>补码>原码>单精度浮点数
3.设x=-35/16,求[x]原,[x]反,[x]补,[x]移。
【解析】
[
x
]
原
=
−
100011
∗
2
−
4
=
110.0011
[x]_原=-100011*2^{-4}=110.0011
[x]原=−100011∗2−4=110.0011
[
x
]
反
=
101.1100
[x]_反=101.1100
[x]反=101.1100
[
x
]
补
=
101.1101
[x]_补=101.1101
[x]补=101.1101
[
x
]
移
=
001.1101
[x]_移=001.1101
[x]移=001.1101
4.设某机器数(定点小数)为16位,最高位为符号位,其余为数值位。若其用原码表示,则表示范围为多少?若用补码表示呢?
【答案】
原码:
[
−
(
1
−
2
−
15
)
,
1
−
2
−
15
]
[-(1-2^{-15}),1-2^{-15}]
[−(1−2−15),1−2−15]
补码:
[
−
1
,
1
−
2
−
15
]
[-1,1-2^{-15}]
[−1,1−2−15]
5.将-21/16表示成IEEE754,32位形式。
【答案】
1011 1111 1010 1000 0000 0000 0000 0000
BFA80000
【解析】
−
21
/
16
=
−
10101
∗
2
−
4
=
11.0101
-21/16=-10101*2^{-4}=11.0101
−21/16=−10101∗2−4=11.0101
S = 1 ; M = 0101 ; E = e + 127 = 0 + 127 = 127 S=1;M=0101;E=e+127=0+127=127 S=1;M=0101;E=e+127=0+127=127
10111111101010000000000000000000 1011 1111 1010 1000 0000 0000 0000 0000 10111111101010000000000000000000
6. (2012考研真题相关)写出IEEE754,32位浮点数能表示的最大正数,非零最小正数,最大负数和最小负数的表示形式及其真值。
7. 如果某机器浮点数32位,其中1位符号位,尾数23位,阶符1位,阶码7位,其中尾数和阶码都用补码表示。请写出在规格化和非规格化两种情况下非零最小正数,最大负数和最小负数的表示形式及其真值。
【答案】
规格化:
最大正数:0011 1111 1111 1111 1111 1111 1111 1111
最小正数:0100 0000 0100 0000 0000 0000 0000 0000
最大负数:1100 0000 0100 0000 0000 0000 0000 0000
最小负数:1011 1111 1000 0000 0000 0000 0000 0000
非规格化:
最大正数:0011 1111 1111 1111 1111 1111 1111 1111
最小正数:0100 0000 0000 0000 0000 0000 0000 0001
最大负数:1100 0000 0111 1111 1111 1111 1111 1111
最小负数:1011 1111 1000 0000 0000 0000 0000 0000
8. 已知小写英文字母“a”的ASCII码值为61H,现字母“g”被存放在某个存储单元中,若采用偶校验(设最高位为校验位),则该存储单元中存放的十六进制数是什么?
【答案】
E7H
【解析】
ps:若将“g”改成“z”。
z=a+25=61H+19H=7AH
z的校验码=1111 1010=FAH
61H=0110 0001B
g=61H+6H=67H=0110 0111B
因为最高位是校验位,并且是偶校验码:g=1110 0111B
g=E7H
9. 在一个按字节编址的计算机中,若数据在存储器中以小端模式存放,假定int型变量i的地址为0800 0000H,i的机器数为01234567H,则地址08000000H中存放的内容是(),如果是大端模式呢?
【答案】
67H 45H 23H 01H
【解析】
小端模式:数据的高字节在高地址,低字节在低地址。
大端模式:数据的高字节在低地址,低字节在高地址。
一个按字节编址:每个内存单元一个字节,这个内存单元存放8位数据
小端模式:
大端模式:
10.某计算机存储器按字节编址,采用小端模式存放数据。假定编译器规定int和short型长度分别为32位和16位,并且数据按边界对齐存储。某C语言程序如下:
struct {
int a;
char b;
short c;
} record;
record.a=273;
若record变量的首地址为0xC008,则地址0xC008中的内容及record.c的地址分别为什么?
【答案】
内容:11H 01H 00H 00H
record.c的地址是:0xC00DH
【解析】
int类型的数据占4个字节,32位。
char类型占1个字节,8位。
short类型占2个字节,16位。
a=273=1 0001 0001=(0000 0000 0000 0000 0000 0001 0001 0001)=00000111H
11.下面的编码中,不是合法8421码的是)
1110,0011 0110,1010 0011,0101 1101,1001 0111
【答案】
1110,1010 0011,0101 1101
【解析】
8421码的范围是:0000-1001
12 .(2013考研真题) 用海明码对长度为8的数据位进行校验纠错时,若能纠正一位错,则校验位的位数至少为()位。
【答案】
4
【解析】
设数据位为D,位数为d;校验位为R,位数为r。
仅能发现并修正一位错:
2
r
>
=
d
+
r
+
1
2^r>=d+r+1
2r>=d+r+1
能发现两位错,并且能修正一位错:
2
r
−
1
>
=
d
+
r
2^{r-1}>=d+r
2r−1>=d+r
13 .(2012考研真题)假定编译器规定int和short类型长度分别为32位和16位,执行下列C语言语句
unsigned short x=65530;
unsigned int y=x;
得到y的机器数为( )
【答案】
0000FFFAH
【解析】
赋值原则:
(1)值不变;
(2)内存单元内容不变
65536
=
64
∗
2
10
=
2
16
65536=64*2^{10}=2^{16}
65536=64∗210=216
y=x=65530=[1111 1111 1111 1010]原=[0000 0000 0000 0000 1111 1111 1111 1010]补=0000FFFAH
14.下列为8位移码机器数[x]移,当求[-x]移时,( )将会溢出
A.11111111 B. 00000000 C. 10000000 D. 01111111
【答案】
B
【解析】
原码、反码表示范围相同
补码、移码表示范围相同
负数表示范围更大,所以x是负数
则x的补码是1000 0000
则x的移码是0000 0000
15.(2011考研真题)float类型数据通常用IEEE 754标准中的单精度浮点数表示。如果编译器将float型变量x分配在一个32位浮点数寄存器FR1中,且x=-8.25,则FR1的内容是( )。
【答案】
C1040000H
【解析】
8.25的二进制表示.
整数部分:8=1000;小数部分:0.25=01;
8.25=1000.01 =1.00001*2^3
1100 0001 0000 0100 0000 0000 0000 0000
C1040000H
16.若接收方接收到的海明码为1001101B,经校验数据无错,并且数据位位数为4位,则数据位为( )。
【答案】
1001
【解析】
D
4
D
3
D
2
R
3
D
1
R
2
R
1
D_4D_3D_2R_3D_1R_2R_1
D4D3D2R3D1R2R1
17.设某数据为D8D7D6D5D4D3D2D1=10100101,采用海明校验并要求具备两位检错能力,求其海明码。并求解在数据位第三位D3发生错误的时候的海明码。
【答案】
无错海明码:0101000100111
D3位出错时:0101000000111
【解析】
D3位出错只有D3位改变,不影响别的位。
R1=D1^D2^D4^D5^d7
R2=D1^D3^D4^D6^D7
R3=D2^D3^D4^D8
R4=D5^D6^D7^D8
R5=D8^...^D1^R4^...R1
18.已知数据位D4D3D2D1=1001,生成多项式G=1101,求CRC编码。
【答案】
1001011
【解析】
D:1001 d=4
G:1101 r=4-1=3
1)将D左移r位,得到M:1001000(d+r位)
2)M模2除G,得到余数r=011
3)CRC=M+R就得到了CRC编码1001011
19.若[x]补=X0X1X2…Xn,其中X0为符号位,X1为最高数位。若(),则当补码左移时,将会发生溢出:
A.X0=X1 B. X0不等于X1 C. X1=0 D. X1=1
【答案】
B
【解析】
过半则溢出:
补码过半:10xxxxx或者01xxxxx
原码过半:数值最高位为1
20.数位每左移一位相当于乘以2,为防止左移操作造成溢出,补码左移的前提条件是:( )。
【解析】
带着符号位一起移动。
移出位移走。补位位:高位补符号位,地位补零。
21.设机器数字长8bit(含有一位符号位),若机器数BAH为原码,算术左移一位和算术右移一位分别是( )和( ),若BAH为补码,则算术左移一位和算术右移一位分别是( )和( )。
【答案】
符号位不动,数值位逻辑左移;
符号位不动,数值位逻辑右移;
带着符号位一起移动,移出位移走,地位补零;
带着符号位一起移动,移出位移走,高位补符号位。
22.如果x=103,y=-25,结果采用8位定点补码表示,下列会发生溢出的是()
A.x+y B. -x+y C. x-y D. -x-y
【答案】
C
【解析】
看绝对值。绝对值变大的才可能溢出。
所以求绝对值最大的数。
只有B和C是绝对值变大的。
B是-128,C是128
因为补码的取值范围是[-128,127]。
所以128溢出。
23.某字长为8位的计算机中,已知整型变量x、y的机器数分别为[x]补=11110100,[y]补=10110000。若整型变量z=2x+y/2,则z的机器数为( )。
【答案】
11000000
【解析】
将x左移一位,得到11101000
y右移一位,得到11011000
两个数的补码相加的机器数为11000000
24. 假设某字长为8位的计算机中,x=34,y=17,求[x+y]补,[x-y]补,[-x+y]补,[-x-y]补。
【答案】
[x+y]补=0011 0011
[x-y]补=0001 0001
[-x+y]补=1110 1111
[-x-y]补=1100 1101
【解析】
[x]补=0010 0010
[y]补=0001 0001
[-x]补=1101 1110
[-y]补=1110 1111
25.某C语言代码如下:
short si=-8196;
unsigned short usi=si;
则执行上段程序后,usi的值为多少
【答案】
64508
【解析】
内存单元内容不变
si=-8196=-(8*2^10+4)=-100 0000 0100=1000 0100 0000 0100(原)=1111 1011 1111 1100(补)
usi=si=1111 1011 1111 1100=2^16-1-3-2^10=64508
27.在C语言中,short型的长度为16bit,若编译器将一个short型变量x分配到一个32位寄存器R中,且x=0x8FA0,则寄存器R的内容是( )。
【答案】
FFFF8FA0
【解析】
8FA0H=1000 1111 1010 0000(补)=1111 0000 0110 0000(原)
1000 0000 0000 0000 0111 0000 0110 0000(原)
1111 1111 1111 1111 1000 1111 1010 0000(补)
数据扩展:值不变
原码:符号位放到最高位,中间补零
补码:符号位前推
28.已知C语言程序中,某类型为int的变量x=-1088。执行程序时,x先被存放在16位寄存器R1中,然后进行算术左移4位,则R1中的内容为( )。
【答案】
1011 1100 0000 0000
【解析】
(1)x的机器数,算术左移4位
-1088=[1000 0100 0100 0000]原=[1111 1011 1100 0000]补
算数左移4位:1011 1100 0000 0000
(2)求出-1088*16=?,再 写出机器数。
29.设某C语言程序如下:
int a=5,b=8;
float x=4.2 ,y=3.4;
则表达式:(float)(a+b)/2+(int)x%(int)y的值是多少?
【答案】
7.5
【解析】
(a+b)/2=(5+8)/2=6.5
(int)x%(int)y=4%3=1;
ans=6.5+1=7.5
30.假定编译器规定int和short类型长度分别为32位和16位,执行下列C语言语句:
unsigned short x=65530;
unsigned int y=x;
得到y的机器数为( )
【答案】
0000FFFAH
【解析】
y=x=65530=[1111 1111 1111 1010]原=[0000 0000 0000 0000 1111 1111 1111 1010]补=0000FFFAH
31.假定在一个8位字长的计算机中运行如下C程序段:
unsigned int x=134;
unsigned int y=246;
int m=x;
int n=y;
unsigned int z1=x-y;
unsigned int z2=x+y;
int k1=m-n;
int k2=m+n;
若编译器编译时将8个8位寄存器R1-R8分别分配给变量x、y、m、n、z1、z2、k1、k2。回答下列问题:
(1)执行上述程序段后,寄存器R1,R5和R6的内容分别是什么?(用十六进制表示)
(2)执行上述程序段后,变量m和k1的值分别是多少?(用十进制表示)
(3)上述程序段涉及带符号整数加减、无符号整数加减运算,这四种运算能否利用同一个加法器及辅助电路实现?简述理由。
(4)计算机内部如何判断带符号整数加减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出。
【答案】
(1)
R1=134=86H;
R5=90H;
R6=7CH;
(2)
m=-122;
k1=-112
(3)
无符号数和有符号数都是以补码的形式存储,加减运算没有区别(不考虑溢出情况时), 只是输出的时候若是有符号数的最高位是符号位。
减法运算求[-x]补的时候,是连同符号位一起按位取反末位加 1,但是如果有溢出情况, 这两者是有区别的,所以可以利用同一个加法器实现,但是溢出判断电路不同。
(4)
判断方法是如果最高位进位和符号位的进位不同,则为溢出;“int k2=m+n;”会溢出; 三种方法可以判断溢出,双符号位、最高位进位、符号相同操作数的运算后与原操作数的符号不同则溢出。
【解析】
(1)
134=1000 0110B=86H ;
x-y=1000 0110B-1111 0110B=1001 0000B=90H;
x+y=1000 0110B+1111 0110B=0111 1100B(溢出)
(2)
m=1000 0110B,做高位为符号位,则 m 的原码为 1111 1010B=-122;
n=1111 0110B n 的原码为 1000 1001= -10;k1=m-n= -112。
32.在C语言中,不同类型的数据混合运算中,要先转换成同一类型后进行运算。设一个表达式中含有int,long,char和double类型的变量和数据,则表达式的最后运算结果的数据类型是( )。这四种类型数据的转换规律是( )。
【答案】
运算结果是:double类型
转换规律是:char->int->long->double
40.假定有4个整数用8位补码分别表示为r1=FEH,r2=F2H,r3=90H,r4=F8H。若将运算结果存放在一个8位寄存器中,则下列运算中会发生溢出的是( )。
A.r1×r2 B. r3×r2 C. r1×r4 D. r4×r2
【答案】
B
【解析】
绝对值最大最可能溢出。
选择两个绝对值最大的。
r1=FEH=1111 1110;
r2=F2H=1111 0010;
r3=90H=1001 0010;
r4=F8H=1111 0100;
最大的两个是r2和r3.
41.假定变量i,f和d的数据类型分别为int、float和double(int用补码表示,float和double分别用IEEE754 单精度和双精度浮点数格式表示),已知i=785,f=1.5678e3,d=1.5e100。若在32位机器中执行下列关系表达式,则结果为“真”的是( )。
I. i==(int)(float)i
II. f==(float)(int)f
III. f==(float)(double)f
IV. (d-f)-d==f
A.仅有I和II B. I和 III C. II和III D. III和IV
【答案】
B
【解析】
由于(int)f=1,小数点后面4位丢失,故Ⅱ错。Ⅳ的计算过程是先将f转化为双精度浮点数据格式,然后进行加法运算,故(d+f)-d得到的结果为双精度浮点数据格式,而f为单精度浮点数据格式,故Ⅳ错。
(Ⅰ)i=(int)(float)i//i变成浮点数,不变;
(Ⅱ)f=(floal)(int)f//f变成整数时,精度变小;
(Ⅲ)f=(float)(double)f//f转为双精度,大小不变;
(Ⅳ)(d+f)-d=f//双精度值==单精度值,结果出错。
45.float型数据通常用IEEE 754单精度浮点数格式表示。假定两个float型变量x和y分别存放在寄存器f1和f2中,若(f1)=CC90 0000H,(f2)=B0C0 0000H,则x和y之间的关系是:
A. x<y,符号相同 B. x>y,符号不同 C. x>y,符号相同 D. x>y,符号不同
【答案】
A
【解析】
f1=1100 1100 1001 0000 0000 0000 0000 0000
f1阶码=1001 1001
f2=1011 0000 1100 0000 0000 0000 0000 0000
f2阶码=0110 0001
f1阶码>f2阶码。
又因为都是负数。
所以x<y