float编码方式

一直知道float不准确,超过一定范围会溢出。但与同事讨论起float的编码是才发现自己一无所知,像个傻逼。

float编码分为三部分,一位的符号位标识正负,八位的指数位标明小数点的位置,二十三位的尾数位表示其的值。

举个网上的例子,8.25。

转化为二进制就是

1000.01

也可以表示为1.00001 * 2^3

此时符号位为0

指数为3,转化为编码

127 + 3 = 130

及10000010

尾数为00001,那么对应的编码为

00001000000000000000000

这里说说指数与尾数,指数一共八位需要表示-127到127,因此0点就相当于偏移到了127,那么3对应的指数就是127+3.补充一下,当指数为128及指数位为全1时并且尾数全为0时,通常用来表示NaN。

再说尾数,当我们使用二进制的科学计数法,及上面的1.00001 * 2^3,除了当值为0的情况下,所有的数都能表示为1.xxx * 2^n,那么我们只需要把小数点后的数取出来,就能表示这个数的值,比如1.00001的尾数是00001。

值得注意的是0如何表示,所有位全是0。

你可能感兴趣的:(float编码方式)