Main Content

定点数

在数字硬件中,数字以二进制字形式存储。二进制字是固定长度的二进制数字(1 和 0)序列。硬件组件或软件函数解释这种 1 和 0 序列的方式由数据类型说明。定点数据类型和 MATLAB® 中的内置整数类型之间有几个明显的区别。最显著的区别是,内置整数数据类型只能代表整数,而定点数据类型还包含关于二进制小数点位置或数字定标的信息。

二进制数字以定点或浮点数据类型的形式来表示。定点数据类型具有以下特征:以位为单位的字大小、二进制小数点,以及是有符号还是无符号。二进制小数点的位置用来定标和解释定点值。使用 Fixed-Point Designer™ 时,定点数据类型可以是整数、小数或广义定点数。这些数据类型之间的主要区别是其默认二进制小数点。例如,广义定点数(有符号或无符号)的二进制表示如下所示:

其中

  • bi 是第 i 个二进制数字。

  • wl 是以位为单位的字长。

  • bwl-1 是最高有效位或最高位 (MSB) 的位置。

  • b0 是最低有效位或最低位 (LSB) 的位置。

  • 二进制小数点显示在 LSB 左侧的四个位置处。因此,在此示例中,该数字称为有四个小数位,或者小数长度为 4。

二进制小数点的解释

二进制小数点是用于对定点数进行定标的方式。通常由软件确定二进制小数点。当执行加法或减法等基本数学运算时,无论定标因子的值如何,硬件都使用相同的逻辑电路。本质上,逻辑电路并不知道存在定标因子。它们视二进制小数点就在 b0 的右边一样来执行有符号或无符号定点二进制代数。

Fixed-Point Designer 支持常规二进制小数点定标 V=Q*2^EV 是真实世界的值,Q 是存储的整数值,E 等于 -FractionLength。换言之,RealWorldValue = StoredInteger * 2 ^ -FractionLength

FractionLength 定义存储的整数值的定标。字长限制存储的整数可取的值,但不限制 FractionLength 可取的值。软件不会根据存储的整数 Q 的字长限制指数 E 的值。由于 E 等于 -FractionLength,因此没有必要将二进制小数点限制为要紧连着小数;小数长度可以是负数或大于字长。

例如,由三个无符号位组成的字在科学记数法中通常以下列方式之一表示。

bbb.=bbb.×20bb.b=bbb.×21b.bb=bbb.×22.bbb=bbb.×23

如果指数大于 0 或小于 -3,则表示将包含许多零。

bbb00000.=bbb.×25bbb00.=bbb.×22.00bbb=bbb.×25.00000bbb=bbb.×28

然而,这些额外的 0 永远不会变为 1,因此它们不会出现在硬件中。此外,与浮点指数不同,定点指数从不出现在硬件中,因此定点指数不受有限位数的限制。

例如,假设一个字长为 8、小数长度为 10、存储的整数值为 5 的有符号值(二进制值 00000101)。真实值使用以下公式计算:
RealWorldValue = StoredInteger * 2 ^ -FractionLength。在本例中,为 RealWorldValue = 5 * 2 ^ -10 = 0.0048828125。由于小数长度比字长要长 2 位,因此存储的整数的二进制值是 x.xx00000101,其中 x 是隐式零的占位符。0.0000000101(二进制)等效于 0.0048828125(十进制)。有关使用 fi 对象的示例,请参阅 小数长度大于字长 (Fixed-Point Designer)

有符号定点数

计算机硬件通常用三种不同方式来表示二进制定点数的求反:原码、1 的补码和 2 的补码。2 的补码是有符号定点数的首选表示,也是 Fixed-Point Designer 使用的唯一表示。

使用 2 的补码求反时,先对位取反(转换为 1 的补码),然后加上一个 1。例如,000101 的 2 的补码是 111011。

定点值是有符号还是无符号通常不会在二进制字中显式编码;也就是说,没有符号位。但是,符号信息在计算机架构中是隐式定义的。

相关主题