【计算机组成原理】运算器和运算方法(习题)

1.将下列数据转换为二进制数据
( A 7. D 3 ) 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
( 45.23 ) o = ( 100101.010011 ) 2 (45.23)_o=(100 101.010 011)_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}
(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}
(2)移码>补码>原码>单精度浮点数

【解析】
(1) ( 11 ) H = ( 17 ) 10 (11)_H=(17)_{10}
( 32 ) 10 = ( 32 ) 10 (32)_{10}=(32)_{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}
( 10010110 ) B C D = ( 96 ) 10 (10010110)_{BCD}=(96)_{10}

(2) ( 0 x F 0000000 ) H = ( 11110000...0000 ) 2 (0xF0000000)_H=(1111 0000...0000)_2
原码: ( 11110000...0000 ) 2 > 2 31 (1111 0000...0000)_2是负数,且绝对值>2^{31}
补码: ( 10010000...000 ) 2 ( ) (1001 0000...000)_2(原)是负数,且绝对值比原码小
移码: ( 01110000...000 ) 2 (0111 0000...000)_2是正数,最大
单精度浮点数: E = 128 + 64 + 32 , e = 97 , > 2 31 E=128+64+32,e=97,绝对值>2^{31}
所以:移码>补码>原码>单精度浮点数

3.设x=-35/16,求[x]原,[x]反,[x]补,[x]移。

【解析】
[ x ] = 100011 2 4 = 110.0011 [x]_原=-100011*2^{-4}=110.0011
[ x ] = 101.1100 [x]_反=101.1100
[ x ] = 101.1101 [x]_补=101.1101
[ x ] = 001.1101 [x]_移=001.1101

4.设某机器数(定点小数)为16位,最高位为符号位,其余为数值位。若其用原码表示,则表示范围为多少?若用补码表示呢?

【答案】
原码: [ ( 1 2 15 ) , 1 2 15 ] [-(1-2^{-15}),1-2^{-15}]
补码: [ 1 , 1 2 15 ] [-1,1-2^{-15}]

5.将-21/16表示成IEEE754,32位形式。

【解析】
21 / 16 = 10101 2 4 = 11.0101 -21/16=-10101*2^{-4}=11.0101

S = 1 M = 0101 E = e + 127 = 4 + 127 = 131 S=1;M=0101;E=e+127=4+127=131

11000001101010000000000000000000 1100 0001 1010 1000 0000 0000 0000 0000

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

【答案】

11101010 0011,0101 1101

【解析】
8421码的范围是:0000-1001

12 .(2013考研真题) 用海明码对长度为8的数据位进行校验纠错时,若能纠正一位错,则校验位的位数至少为()位。

【答案】
4
【解析】
设数据位为D,位数为d;校验位为R,位数为r。
仅能发现并修正一位错: 2 r > = d + r + 1 2^r>=d+r+1
能发现两位错,并且能修正一位错: 2 r 1 > = d + r 2^{r-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}
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

【答案】

【解析】
原码、反码表示范围相同
补码、移码表示范围相同
负数表示范围更大,所以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

17.设某数据为D8D7D6D5D4D3D2D1=10100101,采用海明校验并要求具备两位检错能力,求其海明码。并求解在数据位第三位D3发生错误的时候的海明码。

【答案】
无错海明码:1101000100111
D3位出错时:1101000000111

【解析】
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编码。

【答案】
1001111

【解析】
D:1001 d=4
G:1101 r=4-1=3
1)将D左移r位,得到M:1001000(d+r位)
2)M模2除G,得到余数r=111
3)CRC=M+R就得到了CRC编码1001111

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=8float 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=65530unsigned   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=134unsigned   int   y=246int  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=10000110B=86H ;       
x-y=10000110B-11110110B=10010000B=90H;
x+y=10000110B+11110110B=01111100B(溢出)

(2)

m=10000110B,做高位为符号位,则 m 的原码为 11111010B=-122;
n=11110110B  n 的原码为 10001001=-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

发布了335 篇原创文章 · 获赞 110 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43460224/article/details/105252946