已知两个实数x=—68,y=—8.25,它们在C语言中定义为float型变量,分别存放在寄存器A和B中。另外,还有两个寄存器C和D。A、B、C、D都是32位的寄存器。请问下列问题(要求用十六进制表示二进制序列):
问答题 寄存器A和B中的内容分别是什么?
【正确答案】正确答案:float型变量在计算机中都被表示成IEEE754单精度格式。X=一68=一(1000100) 2 =一1.0001×2 6 ,符号位为1,阶码为127+6=128+5:(1000 0101) 2 ,尾数为1.0001,所以小数部分为:000 1000 0000 0000 0000 0000,合起来整个浮点数表示为:1 1000 0101 000 1000 0000 0000 0000 0000,写成十六进制为:C2880000H。 Y=一8.25=一(1000.01) 2 =一1.00001×2 3 ,符号位为1,阶码为127+3=128+2=(1000 0010) 2 ,尾数为1.00001,所以小数部分为:000 0100 0000 0000 0000 0000,合起来整个浮点数表示为:1 1000 0010 000 0100 0000 0000 0000 0000写成十六进制为C1040000H。 因此,寄存器A和B的内容分别为C2880000H、C1040000H。
【答案解析】
问答题 z和y相加后的结果存放在C寄存器中,寄存器C中的内容是什么?
【正确答案】正确答案:两个浮点数相加的步骤如下: ①对阶:E x =10000101,E y =10000010,则: [E x 一E y ]补=[E y ] +[一E y ] =10000101+01111110=00000011。 E x 大于E y ,所以对y进行对阶。对阶后,y=一0.00100001×2 6 。 ②尾数相加:X的尾数为一1.000 1000 0000 0000 0000 0000,Y的尾数为一0.001 0000 1000 0000 0000 0000, 用原码加法运算实现,两数符号相同,做加法,结果为一1.001 1000 1000 0000 0000 0000。 即x加y的结果为一1.001 10001×2 6 ,所以符号位为1,尾数为:001 1000 1000 0000 0000 0000,阶码为127+6=128+5,即:1000 0101。合起来为:1 1000 0101 001 1000 1000 0000 0000 0000,转换为十六进制形式为:C2988000H。 所以C寄存器中的内容是C2988000H。
【答案解析】
问答题 x和y相减后的结果存放在D寄存器中,寄存器D中的内容是什么?
【正确答案】正确答案:两个浮点数相减的步骤同加法,对阶的结果也一样,只是尾数相减。 尾数相减:X的尾数为一1.000 1000 0000 0000 0000 0000,y的尾数为一0.001 0000 1000 0000 0000 0000。 用原码减法运算实现,两数符号相同,做减法:符号位:取大数的符号,负数,所以为1。数值部分:大数加小数负数的补码:
【答案解析】