已知两个实数x=-68,y=-8.25,它们在C语言中定义为float型变量,分别存放在寄存器A和B中。另外,还有两个寄存器C和D。A、B、C、D都是32泣的寄存器。请问(要求用十六进制表示二进制序列): (1)寄存器A和B中的内容分别是什么? (

admin2014-07-18  29

问题 已知两个实数x=-68,y=-8.25,它们在C语言中定义为float型变量,分别存放在寄存器A和B中。另外,还有两个寄存器C和D。A、B、C、D都是32泣的寄存器。请问(要求用十六进制表示二进制序列):
  (1)寄存器A和B中的内容分别是什么?
  (2)x和y相加后的结果存放在C寄存器中,寄存器C中的内容是什么?
  (3)x和y相减后的结果存放在D寄存器中,寄存器D中的内容是什么?

选项

答案(1)float型变量在计算机中都被表示成IEEE754单精度格式。 X=-68=-(1000100)2=-1.0001×26,符号位为1,阶码127+6=128+5=(10000101)2,尾数为1.0001,所以小数部分为:000 1000 0000 0000 0000 0000,合起来整个浮点数表示为:11000 0101 000 1000 0000 0000 0000 0000,写成十六进制为:C2880000H。 Y=-8.25=-(1000.01)2=-(1000.01)2=-1.00001×23,符号位为1,阶码为127+3=128+2=(1000 0010)2,尾数为1.00001,所以小数部分为:000 0100 0000 000000000000,合起来整个浮点数表示为:1 1000 0010 000 0100 0000 0000 0000 0000,写成十六进制为C1040000H。因此,寄存器A和B的内容分别为C2880000H、C1040000H。 (2)两个浮点数相加的步骤如下: ①对阶:Ex=10000101,Ey=10 000 010,则:[Ex一Ey]=[Ex]一[E,]补--.10 000 101+01111 110=00 000 011。E大于Ex,所以对y进行对阶。对阶后,y=一0.00 100 001×26。 ②尾数相加: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 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。 (3)两个浮点数相减的步骤同加法,对阶的结果也一样,只是尾数相减。尾数相减:x的尾数为-1.000 1000 0000 0000 0000 0000,y的尾数为-0.001 0000 1000 0000 0000 0000。 用原码减法运算实现,两数符号相同,做减法;符号位:取大数的符号为1:数值部分:大数加小数负数的补码:x减y的结果为-0.11101111×26=1.1101111×25,所以,符号位为1,尾数为110 1111 0000 0000 0000 0000,阶码为127+5=128+4,即1000 0100,合起来为:1 1000 0100 110 1111 0000 0000 0000 0000,转换为十六进制形式为:C26F0000H,所以寄存器D中的内容是C26F0000H。

解析
转载请注明原文地址:https://kaotiyun.com/show/haxi777K
0

最新回复(0)