随着数字信号处理和嵌入式系统的发展,定点数运算在各类应用中逐渐展现出其重要性。相比浮点数运算,定点数运算以其更高的效率和更低的存储需求在实时计算和数据处理领域占据了不可或缺的地位。
定点数是按固定小数点位置表示的一种数值表达方式。与浮点数不同,定点数的值是基于数值的整数部分和小数部分的和,通过固定的小数点位置来表示,这使得定点数运算在硬件实现上更加简单。
定点数通常利用不同的位数表示数值,主要包括:
例如,16位定点数可以表述为:1位符号位 + 7位整数部分 + 8位小数部分,表示的范围是-128到127.99609375。这种格式不仅可以直接表示整数,也能满足对小数的基本需求。
定点数的运算主要包括加法、减法、乘法和除法。以下对这些基本运算进行详细说明。
定点数加法的基本过程可以概括如下:
加法公式
对于定点数的加法,给定两个定点数 A 和 B,运算可以表示为:[ C = A + B ]
例题 1:定点加法
题目:假设有以下两个定点数:
请计算 A + B 的结果。
解答:
登录后复制
0101.1100
+ 0011.0011
-------------
1001.1111
[ C = 1 \times 2^3 + 0 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} + 1 \times 2^{-2} + 1 \times 2^{-3} = 8 + 0 + 0 + 1 + 0.5 + 0.25 + 0.125 = 9.9375 ]
结果:A + B = 1001.1111(二进制),即 9.9375(十进制)。
例题 2:定点加法
题目:假设有以下两个定点数:
请计算 A + B 的结果。
解答:
登录后复制
0010.1010
+ 0001.0110
-------------
0011.1000
[ C = 0 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} + 0 \times 2^{-2} + 0 \times 2^{-3} = 0 + 0 + 2 + 1 + 0.5 + 0 + 0 = 3.5 ]
结果:A + B = 0011.1000(反向),即 3.5(十进制)。
减法实际上可以转换为加法,具体步骤如下:
减法公式
对于定点数的减法,给定两个定点数 A 和 B,减法运算可以表示为:[ C = A - B ]
例题 3:定点减法
题目:假设有以下两个定点数:
请计算 A - B 的结果。
解答:
登录后复制
取反:0010.0110 → 1101.1001
加一:1101.1001 + 1 = 1101.1010
登录后复制
1100.1010
+ 1101.1010
-------------
1 1010.0100
这里出现了溢出位(1),则只看结果 1010.0100。
[ C = -2^3 + 0 + 1 \times 2^1 + 0 \times 2^0 + 1 \times 2^{-1} + 0 \times 2^{-2} + 0 \times 2^{-3} = -8 + 0 + 2 + 0 + 0.5 + 0 + 0 = -5.5 ]
结果:A - B = 1010.0100(反向),即 -5.5(十进制)。
例题 4:定点减法
题目:假设有以下两个定点数:
请计算 A - B 的结果。
解答:
登录后复制
B = 1.25的补码运算
- 原码:0001.0100
- 取反:1110.1011
- 加一:1110.1011 + 0000.0001 = 1110.1100
登录后复制
0011.1000
+ 1110.1100
-------------
1 0010.0100
去掉溢出位,结果为 0010.0100。
[ C = 2 \times 2^1 + 1 \times 2^0 + 0 \times 2^{-1} + 1 \times 2^{-2} = 2 + 0 + 0.25 = 2.25 ]
结果:A - B = 0010.0100(反向),即 2.25(十进制)。
乘法的过程相对复杂,通常包括以下步骤:
乘法公式
对于两个定点数 A 和 B,定点数乘法的计算可以表示为:[ C = A \times B ]
例题 1:定点乘法
题目:假设有以下两个定点数:
请计算 A × B 的结果。
解答:
登录后复制
0011.0100
× 0001.1001
----------------
0011.0100 (A × 1)
+ 0000.0000 (A × 0)
+ 0011.0100 (A × 1,左移一位)
+ 0000.0000 (A × 0,左移两位)
+ 0011.0100 (A × 1,左移三位)
----------------
0000 0000 0000 0110 1100(这里留下进位)
登录后复制
0000 0011.0100
+ 0000 0000.0000
+ 0000 0110.1000
+ 0000 0000.0000
+ 0011 0100.0000
---------------------
0000 0100.0000 0000 (注意小数点位置和有效位数)
结果:A × B = 0001.11100100(二进制),即5.078125(十进制)。
例题 2:定点乘法
题目:假设有以下两个定点数:
请计算 A × B 的结果。
解答:
登录后复制
0100.1100
× 0010.0001
----------------
0100.1100 (A × 1)
+ 0000.0000 (A × 0)
+ 0000.0000 (A × 0,左移一位)
+ 0100.1100 (A × 1,左移两位)
----------------
0000 0000 0101 0110 0000(这里留下进位)
登录后复制
0000 0000.0000 (来自第0行)
+ 0000 0000.0000 (来自第1行)
+ 0000 0000.0000 (来自第2行)
+ 0100 1100.0000 (来自第3行)
---------------------
0001 0001.1010
结果:A × B = 0001.10011000(二进制),即 9.8046875(十进制)。
定点数除法通常会比其他运算复杂,主要流程如下:
除法公式
对于两个定点数 A 和 B,定点数除法的计算可以表示为:[ C = A ÷ B ]
例题 3:定点除法
题目:假设有以下两个定点数:
请计算 A ÷ B 的结果。
解答:
登录后复制
0100.1000
× 0000.1100
---------------------
(计算过程类似乘法)
结果:A ÷ B = 0011.1000(二进制),即 3.6(十进制)。
例题 4:定点除法
题目:假设有以下两个定点数:
请计算 A ÷ B 的结果。
解答:
登录后复制
0111.0000
× 0000.1010
---------------------
(与先前的乘法类似)
结果:A ÷ B = 0010.1101(二进制),即 4.6667(十进制)。
如有表述错误及欠缺之处敬请批评指正。
【参考文献】
《计算机组成原理》,唐朔飞
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有