定点小数 不需要指数部分 不采用移码
定点小数不采用移码的本质原因是它不需要指数部分,因此也就无需对指数进行编码(如移码)。下面通过一个具体例子来说明原因和区别。
🔧【背景知识:移码】
移码是一种对**有符号整数(如指数)**的编码方式,常用于浮点数的指数部分,用来避免负数,便于比较大小。
比如 8 位移码表示,偏移量是 2 7 − 1 = 127 2^{7} - 1 = 127 27−1=127,即
- 真数 − 3 -3 −3 → 移码 124 124 124 (即 − 3 + 127 = 124 -3 + 127 = 124 −3+127=124)
- 真数 0 0 0 → 移码 127 127 127
- 真数 + 3 +3 +3 → 移码 130 130 130
🎯【定点小数 VS 浮点数的例子】
我们以表示数值 -1.75 为例,对比定点数和浮点数的处理方式:
✅ 定点小数的表示方式(假设 Q3.4 格式)
Q3.4 是一种常见的定点格式,表示:
- 3 位整数部分(含符号位),4 位小数部分
- 总共 8 位(或任意固定长度)
步骤:
-
将 -1.75 表示为二进制:
- 1 的二进制是
0001
- 0.75 的二进制是
1100
(因为 0.75 = 0.5 + 0.25 = 2 − 1 + 2 − 2 0.75 = 0.5 + 0.25 = 2^{-1} + 2^{-2} 0.75=0.5+0.25=2−1+2−2)
- 1 的二进制是
-
所以 -1.75 的二进制是
1.1100
(注意小数点) -
Q3.4 中没有显式小数点,小数点固定在第4位。用补码表达 -1.75:
- +1.75 是
00011100
- -1.75(补码)是
11100100
- +1.75 是
👉 最终表示: 11100100
❌ 为什么不需要移码?
- 小数点是固定的,不用记录或编码其位置。
- 没有“指数”,自然就不需要对指数进行移码。
- 用补码直接处理加减乘除即可。
🧮 浮点数的表示方式(IEEE 754 单精度为例)
IEEE 754 单精度浮点表示包含:
- 1 位符号位
- 8 位移码指数(偏移 127)
- 23 位尾数(有效位)
-1.75 的浮点表示:
- 二进制为:
-1.75 = -1.11
- 规格化形式为:
-1.11 × 2^0
- 指数部分为 0 + 127 = 127 0 + 127 = 127 0+127=127,移码表示为
01111111
- 尾数为去掉隐含的 1 后的
.11
,补到 23 位为:11000000...
👉 需要用移码来编码指数部分的正负
🧠【总结:定点小数不采用移码的原因】
原因 | 说明 |
---|---|
❌ 没有指数部分 | 定点数的小数点是固定的,不需移动小数点,因此不需表示指数 |
❌ 无需编码正负指数 | 不存在正负指数,自然也就不需要移码去处理指数的正负问题 |
✅ 运算逻辑简单 | 加减乘除均可直接进行,无需像浮点数那样处理规格化和对阶 |
✅ 适合资源受限系统 | 实现简单,特别适用于嵌入式系统、DSP等场景 |
如果你需要,我也可以提供一段代码模拟定点小数的计算过程,进一步说明它为何不使用移码。