这里用了一下《深入理解计算机系统》中的几个习题来具体说明了一下
主要分为以下几个步骤:
1、转换为二进制
2、写为IEEE 754表达格式
3、求尾数、阶码、符号位
4、机器码以及十六进制表示
+1.75:
二进制表示:+1.11
IEEE 754表达形式:(-1)^s X 1.f X 2^(e-127),
s = 0(符号位)
1.f = 1.110000..00(尾数)
e-127 =0,e=127=0111 1111 (阶码)
符号:正数为0
十六进制:3FE00000H
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+19:
二进制表示:+0001 0011
IEEE 754表达形式:(-1)^s X 1.f X 2^(e-127),
s = 0(符号位)
1.f = 1.0011..00(尾数)
e-127 =4,e=131=1000 0011 (阶码)
符号:正数为0
十六进制:41980000H
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
-1/8:
二进制表示:-0.001
IEEE 754表达形式:(-1)^s X 1.f X 2^(e-127),
s = 1(符号位)
1.f =1. 000..00(尾数)
e-127 =-3,e=124=0111 1100 (阶码)
符号:负数为1
十六进制:BE000000H
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
258:
二进制表示:+1 0000 0010
IEEE 754表达形式:(-1)^s X 1.f X 2^(e-127),
s = 0(符号位)
1.f = 1.0000 0010..00(尾数)
e-127 =8,e=135=1000 0111 (阶码)
符号:正数为0
十六进制:43810000H
0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
利用IEEE 754标准求下列加减法:
1)0.75 + (-65.25)
2)0.75 - (-65.25)
设 X = +0.75, Y =-65.25
[X]2 = +0.1100
机器码表示为:0 0111 1110 1000 ...00
则阶码EX= 0111 1110
[Y]2 =- 1000 001.01
机器码表示为:1 1000 0101 0000 0101 0000...00
则阶码EY= 1000 0101
- 对阶后
在进行对阶的时候:EX= 0111 1110 EY= 1000 0101
[EX- EY]补 = 0111 1110 + 0111 1011 (mod 256)= 1111 1001 (mod 256) = (-7)10
所以X的尾数需要右移7位,对阶后X的阶码移码为 1000 0101,故实际阶码也即尾数操作后需要右移的位数为:1000 0101 - 0111 1111 = 0000 0110 = 6。
- 尾数加减
- 相加:-1.00000010 X 2^6 = (-64.50)10
- 相减: +1.00001000 X2^6 = (66.00)10
- 尾数的舍入处理
尾数没有舍入
- 阶码溢出判断
两次均没有出现阶码溢出的情况。
所以结果为:
-64.50和66.00