将下列十进制数表示成浮点规格化数,阶码为4位,尾数为10位,各含1位符号,阶码和尾数均用补码表示。
1. 57/128
【答案】1111, 0111001000
【解题过程】
第一步,将57/128的结果转化为二进制数。
57/128=0.4453125(D)=0.0111001(B)
注:D代表十进制,B代表二进制。
第二步,将0.0111001(B)转为浮点数,调整小数点的位置,默认要将小数点放在有效数值 (即1)的前面,所以这里我们要将小数点后调一位。
0.0111001(B)=0.111001(B)*2^-1,即0.111001(B)乘以2的负一次方
第三步,将0.111001(B)*2^-1的阶码-1转化为二进制阶码的形式。
第四步,按题目要求对应规格化。
(1)阶码
阶码=阶符+阶值
根据第三步的图片,有人疑惑为什么从11变成了1001,主要是因为题目要求阶码要4位
第一位是表示阶符,剩余的3位表示阶值,根据8421法,我们就在1前面补2个0,表示的值还是1
能不能把0放在1后面呢?
当然不行,放在1后面就变成了1100,第一位是表示阶符,后面100根据8421法,就等于4了,就不匹配了
若题目要求阶码要3位,怎么写?
阶符不变,负号用二进制1表示,剩余2位表示阶值,根据8421法,我们就在1前面补1个0,表示的值还是1
但这里的阶码只是原码,题目要求阶码和尾数均用补码表示
1001(原):符号位不变,原码取反加1等1111(补)
(2)尾数
尾数=数符+尾数值
尾数的数符取决于0.111001(B)*2^-1的小数点前的是0还是1,我们这里是0,所以数符为0
尾数值为111001
尾数=数符+尾数值=0111001,题目要求10位尾数,所以我们在0111001后补3个0即可,0111001000。
由于这里是正数,所以0.0111001000(B)的反码、补码都是其本身。
所以尾数是0111001000
答案即为1111, 0111001000
2. -69/128
【答案】0000, 1011101100
【解题过程】
第一步,将-69/128的结果转化为二进制数。
-69/128=-0.5395(D)=-0.1000101(B)=1.1000101(B)
注:D代表十进制,B代表二进制,-0用1表示符号为负即可
第二步,将1.1000101(B)转为浮点数,这里小数点本身就在有效数值的前面,所以无须调整小数点的位置,为方便阶码的计算,我们写成乘以2的零次方的形式。
1.1000101=1.1000101*2^0
第三步和第四步,将1.1000101*2^0的阶码0转化为二进制阶码的形式,按题目要求对应规格化。
(1)阶码
阶码=阶符+阶值
1.1000101*2^0的阶码本身为0,题目要求阶码为4位,即阶码的原码为0000,这里的阶码的原码与其补码一致,都是0000.
(2)尾数
尾数=数符+尾数值
尾数的数符取决于1.1000101*2^0的小数点前的是0还是1,我们这里是1,所以数符为1
尾数值为1000101
尾数=数符+尾数值=11000101,题目要求10位尾数,所以我们在11000101后补2个0即可,1100010100。
由于这里是负数,所以我们给1100010100的符号位不变,数值位取反加一
所以尾数是1100010011(原)=1011101100(补)
答案即为0000, 1011101100