定点数的表达方式

关注我的公众号c137Lab获取更多相关内容

在这里插入图片描述

无符号整数 Unsigned Integer

​ 设 X X X 是一个 N N N 位无符号二进制数,其范围为 [ 0 , 2 N − 1 ] [0,2^N-1] [0,2N1] ,表示方法如下:
X = ∑ n = 0 N − 1 x n 2 n X=\displaystyle \sum^{N-1}_{n=0}x_n2^n X=n=0N1xn2n
​ 其中 x n x_n xn X X X 的第 N N N 位二进制数字(也就是 x n ∈ [ 0 , 1 ] x_n\in[0,1] xn[0,1])。数字 x 0 x_0 x0 被称作最低有效位(Least Significant Bit,LSB),具有相当于个位的权重。数字 x n − 1 x_{n-1} xn1 就是最高有效位(Most Significant Bit,MSB)。具有相当于 2 N − 1 2^{N-1} 2N1 的权重。

有符号数值 Signed-MagnitudeSM

N N N 位有符号整数中的第一位(即MSB)代表符号,余下的 N − 1 N-1 N1 位代表数值。范围为 [ − ( 2 N − 1 − 1 ) , 2 N − 1 − 1 ] [-(2^{N-1}-1),2^{N-1}-1] [(2N11),2N11].

  • 优点:有助于防止溢出。
  • 缺点:加法需要根据哪一个操作数更大分开运算。
二进制补码 Two’s Complement2C

​ 最为流行的有符号数字系统, N N N 位二进制补码的表达范围为 [ − 2 N − 1 , 2 N − 1 − 1 ] [-2^{N-1},2^{N-1}-1] [2N1,2N11] ,溢出可以忽略

例如,计算 3 − 2 3-2 32 的值时

在这里插入图片描述
不难看出这时溢出可以忽略。

​ 二进制补码还可以用来实现模 2 N 2^N 2N 算法而不需要在算法中做任何改动(应用于设计CIC滤波器).

二进制反码 One’s Complement1C

N N N 位二进制反码表达范围为 [ − ( 2 N − 1 + 1 ) , 2 N − 1 − 1 ] [-(2^{N-1}+1),2^{N-1}-1] [(2N1+1),2N11] , 0 0 0 有正零和负零两种冗余的表达。
在这里插入图片描述

​ 如图,二进制反码在运算中需要“进位回绕(carry wrap-around)”加法。但是其可以有效的实现模 2 N − 1 2^N-1 2N1 运算,而且不需要矫正,在实现特殊算法(如整数环上的Mersenne变换)时有特殊价值.

减一系统 Diminished one SystemD1

​ 减一系统是一种有偏差的系统,正整数与二进制补码相比减少了1。 N − 1 N-1 N1 位 D1 数值的范围是 [ − 2 N − 1 , 2 N − 1 ] [-2^{N-1},2^{N-1}] [2N1,2N1](不含0). D1的编码规则如下:
X = { ∑ n = 0 N − 2 x n 2 n + 1 X ≥ 0 − 2 N − 1 + ∑ n = 0 N − 2 x n 2 n X > 0 2 N X = 0 X=\begin{cases} \displaystyle\sum^{N-2}_{n=0}x_n2^n+1& X\geq0\\ -2^{N-1}+\displaystyle\sum^{N-2}_{n=0}x_n2^n& X>0\\ 2^N& X=0 \end{cases} X=n=0N2xn2n+12N1+n=0N2xn2n2NX0X>0X=0

​ 为方便理解,下表为3位D1编码的例子:

二进制数 D1
011 4
010 3
001 2
000 1
111 -1
110 -2
101 -3
100 -4
1000 0

下面是两个D1数值相加运算的例子:

在这里插入图片描述

​ 从上面的例子看出 D1 必须计算补码和反向进位的加法。D1数值不需要在算法上做出任何改动就能有效实现模 2 N + 1 2^N+1 2N+1 运算(例如实现费尔马Network Transfer Table,NTT).

偏差系统 Bias System

​ 偏差系统对所有数都有一个偏差(bias),通常 b i a s = 2 N − 1 − 1 bias=2^{N-1}-1 bias=2N11 N N N 位偏差数的范围是 [ − 2 N − 1 − 1 , 2 N − 1 ] [-2^{N-1}-1,2^{N-1}] [2N11,2N1],0 就被编码为 b i a s bias bias 的值。定义如下:
X = ∑ n = 0 N − 1 x n 2 n − b i a s X=\displaystyle\sum^{N-1}_{n=0}x_n2^n-bias X=n=0N1xn2nbias

偏差系统加法实例:

​ 对于加法,每次运算都要减掉偏差,对于减法,每次运算都要加上偏差。偏差能够简化数值的比较,可以用于对浮点数指数的编码中.

参考文献:Digital Signal Processing with Field Programmable Gate Arrays --U.Meyer-Baese

猜你喜欢

转载自blog.csdn.net/verse_monger/article/details/105440868