问答题
已知两个实数x=-68,y=8.25,它们在C语言中定义为float型变量,分别存放在寄存器A和B中。另外,还有两个寄存器C和D。A、B、C、D都是32位的寄存器。请问(要求用十六进制表示二进制序列):
问答题
寄存器A和B中的内容分别是什么?
【正确答案】float型变量在计算机中都被表示成IEEE 754单精度格式。x=-68=-(1000 100)2=-1.0001×26,符号位为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.000001×23,符号位为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。
【答案解析】
问答题
x和y相加后的结果存放在C寄存器中,寄存器C中的内容是什么?
【正确答案】两个浮点数相加的步骤如下。
①对阶:Ex=1000 0101,Ey=1000 0010,则
[Ex-Ey]补=[Ex]补+[-Ey]补=1000 0101+0111 1110=0000 0011
Ex大于Ey,所以对y进行对阶。对阶后,y=-0.00100001×26。
②尾数相加:x的尾数为-1.000 1000 0000 0000 0000 0000,y的尾数为-0.001 0000 1000 0000 0000 0000。用原码加法运算实现,两数符号相同,做加法,结果为-1.001 1000 1000 0000 0000 0000 0000。
即x加y的结果为-1.001 1000 1×26,所以符号位为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中的内容是什么?
注:float型变量在计算机中都被表示成IEEE 754单精度格式。
【正确答案】两个浮点数相减的步骤同加法,对阶的结果也一样,只是尾数相减。
尾数相减:x的尾数为-1.000 1000 0000 0000 0000 0000,y的尾数为-0.001 0000 1000 0000 0000 0000。用原码减法运算实现,两数符号相同,做减法。符号位取大数的符号,为1;数值部分为大数加小数负数的补码,即
1.000 1000 0000 0000 0000 0000
+ 1.110 1111 1000 0000 0000 0000
0.111 0111 1000 0000 0000 0000
x减y的结果为-0.111 01111×26=1.1101111×25,所以符号位为1,尾数为110 1111 0000 0000 0000 0000,阶码为127+5=128+4=(1000 0100)2,合起来为11000 0100 110 1111 0000 0000 0000 0000,转换为十六进制形式为C26F0000H。所以寄存器D中的内容是C26F0000H。
注意:如果是对于选择题,上问和这问可不采用这么严格的计算,可以采用“偷懒”的方法,先将十进制的x+y、x-y计算之后,结果再转成IEEE 754。对于大题,也可以采用这种方法验证结果的正确性。
【答案解析】