最近学习过程中发现,使用Python和Matlab等纯软件实现数字信号处理算法时根本不需要考虑数值的表示,但是使用硬件实现时,还是有必要复习下之前学过的计算机知识。
(一)整数的二进制表示
在二进制系统中,整数的表示可分为有符号数和无符号数两种。
无符号数表示的整数范围:0-2^N-1,例如8位无符号数可表示的范围0~255。
有符号数,即整数不只有正整数,还有负整数,通常使用最高位来表示符号位,1:-,0:+。
(二)原码、反码、补码
对于有符号数而言,在进行二进制运算时采用原码很不方便,所以对于二进制有符号数的运算都是采用补码实现的。
(三)加法与溢出
无符号数溢出,只需要看最高位是否有进位就可判断是否溢出。
有符号的溢出,正+正=负,负+负=正都可表明计算结果发生了溢出。
(四)定点数和浮点数
(1)定点数:即小数位是固定的,固定的小数点位置决定了固定位数的整数部分和小数部分。
图1 单精度定点数的表示
例:8位字长定点数,
1) 11010.110,5个整数位,3个小数位,表示-5.25;
2) 110.10110,3个整数位,5个小数位,表示-1.3125。显然,对于固定字长的二进制数来说,整数位越大可表示的数值越大,相应的精度降低。
(2)浮点数:浮点数可提供更大的动态范围表示,且相比定点数具有更高的分辨率。
图2 单精度定点数的表示
浮点数的存储格式,一般按照标准 IEEE 754。
IEEE 754 规定,浮点数的表示方法为:

最高的 1 位是符号位 s,接着的 8 位是指数E,剩下的 23 位为有效数字 M,其实也就是二进制数的科学计数法吧,通常还有个偏置bias用来表示指数的正负,对于32位单精度
浮点数,指数位8位,采用127作为bias,大于127取正,小于127取负。
例如:
5 DEC = 101 BIN = 1.01 x 2^2
9 DEC = 1001 BIN = 1.001 x 2^3
100 DEC = 01100100 BIN = 1.100100 x 2^6
0.125 DEC = 0.001 BIN = 1 x 2^-3。
浮点数到十进制数的转换如图: