关注我的公众号c137Lab获取更多相关内容
无符号整数 Unsigned Integer
设 X X X 是一个 N N N 位无符号二进制数,其范围为 [ 0 , 2 N − 1 ] [0,2^N-1] [0,2N−1] ,表示方法如下:
X = ∑ n = 0 N − 1 x n 2 n X=\displaystyle \sum^{N-1}_{n=0}x_n2^n X=n=0∑N−1xn2n
其中 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} xn−1 就是最高有效位(Most Significant Bit,MSB)。具有相当于 2 N − 1 2^{N-1} 2N−1 的权重。
有符号数值 Signed-Magnitude,SM
N N N 位有符号整数中的第一位(即MSB)代表符号,余下的 N − 1 N-1 N−1 位代表数值。范围为 [ − ( 2 N − 1 − 1 ) , 2 N − 1 − 1 ] [-(2^{N-1}-1),2^{N-1}-1] [−(2N−1−1),2N−1−1].
- 优点:有助于防止溢出。
- 缺点:加法需要根据哪一个操作数更大分开运算。
二进制补码 Two’s Complement,2C
最为流行的有符号数字系统, N N N 位二进制补码的表达范围为 [ − 2 N − 1 , 2 N − 1 − 1 ] [-2^{N-1},2^{N-1}-1] [−2N−1,2N−1−1] ,溢出可以忽略
例如,计算 3 − 2 3-2 3−2 的值时
不难看出这时溢出可以忽略。
二进制补码还可以用来实现模 2 N 2^N 2N 算法而不需要在算法中做任何改动(应用于设计CIC滤波器).
二进制反码 One’s Complement, 1C
N N N 位二进制反码表达范围为 [ − ( 2 N − 1 + 1 ) , 2 N − 1 − 1 ] [-(2^{N-1}+1),2^{N-1}-1] [−(2N−1+1),2N−1−1] , 0 0 0 有正零和负零两种冗余的表达。
如图,二进制反码在运算中需要“进位回绕(carry wrap-around)”加法。但是其可以有效的实现模 2 N − 1 2^N-1 2N−1 运算,而且不需要矫正,在实现特殊算法(如整数环上的Mersenne变换)时有特殊价值.
减一系统 Diminished one System,D1
减一系统是一种有偏差的系统,正整数与二进制补码相比减少了1。 N − 1 N-1 N−1 位 D1 数值的范围是 [ − 2 N − 1 , 2 N − 1 ] [-2^{N-1},2^{N-1}] [−2N−1,2N−1](不含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=0∑N−2xn2n+1−2N−1+n=0∑N−2xn2n2NX≥0X>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=2N−1−1 , N N N 位偏差数的范围是 [ − 2 N − 1 − 1 , 2 N − 1 ] [-2^{N-1}-1,2^{N-1}] [−2N−1−1,2N−1],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=0∑N−1xn2n−bias
偏差系统加法实例:
对于加法,每次运算都要减掉偏差,对于减法,每次运算都要加上偏差。偏差能够简化数值的比较,可以用于对浮点数指数的编码中.
参考文献:Digital Signal Processing with Field Programmable Gate Arrays --U.Meyer-Baese