浮点数分为单精度(float)和双精度(double),它们的表示方法很特别,区别于整数,我们常用的十进制表示法也有穷尽不能表示的数,更不用说二进制了,那么他们是怎么表示的呢?
首先要知道11.11(二进制) 这个该怎么换算? 11.11 = 1*2^1+1*2^0+1*2^-1+1*2^-2 以此类推。
那么计算机表示浮点数,需要三种位模式+两个常数,符号位(1位)+ 阶码位(k位)+ 尾数位(n位) , 一个常数bias作为偏置量,bias=2^(k-1)-1,一个常数是1。1.11*2^4 = 11100 ,1.11*2^-4 = 0.000111 阶码就是指数,小数点后面乘号之前是尾数位,符号位不说了。很简单对吧,但是这里有小细节! 指数并不是单纯的阶码而已,阶码-bias = 指数,我们假定六位浮点数中,k=3,n=2,那么bias=3,随便拿一个数出来,0 110 11, 为了容易看我分开写了,阶码=110=6 指数 = 6-3 = 3; 那尾数位怎么办呢,尾数位=11 最后写出来就是 0.11*2^3 但是这不符合科学计数法标准,所以加一!那么最后结果就是 1.11*2 ^3 = 14 这也是六位浮点数所能表示的最大正数,为什么呢? 110上边还有111呢? 14怎么可能是最大的,事实是阶码 000 和 111 被占用了 用来表示一些特殊的数,所以阶码编码只能从 001 到 110,所以想当然 0 001 11 是最小的负数。
上面说了 阶码000 和 111 被用来表示一些特殊的数,什么数呢? 还是6位浮点数 011100 表示正无穷; 111100 表示负无穷。当然还有其他的数这里就不说了(本来想画个数轴来表示,会更好一点,可是,不知道怎么画,总不能在纸上画出来用照片截吧=。=)