假设我想添加,减去和/或乘以以下格式的以下两个浮点数:
1位符号
3位指数(偏差3)
6位尾数
有人能简单解释一下我会怎么做吗?我尝试在线搜索有用的资源,但我找不到任何太直观的东西。但是,我知道程序通常应该非常简单。作为一个例子,这里有两个我想要执行三个操作的数字:
0 110 010001
1 010 010000
答案 0 :(得分:3)
首先,取有效数字编码并在其前面加上“1”,然后用符号位确定的符号写出结果。因此,对于您的示例数字,我们有:
+1.010001
-1.010000
然而,它们具有不同的尺度,因为它们具有不同的指数。第二个的指数比第一个小指数小(010 2 与110 2 相比)。所以将它向右移动四位:
+1.010001
- .0001010000
现在两个有效数字具有相同的比例(指数110 2 ),因此我们可以在二进制中执行常规算术:
+1.010001
- .0001010000
_____________
+1.0011000000
接下来,将有效位数舍入到可用位(七位)。在这种情况下,尾随位为零,因此舍入不会改变任何内容:
+1.001100
此时,如果大于2(10 2 )或小于1,我们可以有一个需要更多移位的有效数。但是,这个有效数字正好在我们想要的地方,在1和2之间。因此我们可以保持指数不变(110 2 )。
将符号转换回位,从有效数字中取出前导“1”,并将这些位放在一起:
0 110 001100
如果数字溢出或低于正常指数范围,则会出现异常,但这些都不会发生。