浮点数转换二进制

浮点数在计算机中存储也是以二进制的形式,遵循IEEE二进制算数标准;格式为:

float : 符号位(首位)、指数位(8位)、尾数(23位)

double:符号位(首位)、指数位(11位)、尾数(52位)

 

一 格式

符号位:0 正数 1 负数

指数位:二进制转换为十进制的偏差为 2^(位数-1)-1

尾数:小数部分,由于尾数规格化,所以最高位总是1,所以直接就隐藏掉。。。

 

二 转为示例

1、0.5转为二进制

首先正数,首位 0

其次整数部分为0,小数0.5,(取整数部分)

  0.5*2 = 1.0 (取1)

所以为 0 . 100 0000 0000 0000 0000 0000, 右移 1位为 1 . 000 0000 0000 0000 0000 正好符合规则,

所以最终尾数为000 0000 0000 0000 0000

最后指数位:2^(8-1) -1 + (-1) = 126   => 0111 1110 

最终转为二进制为: 0 0111 1110 000 0000 0000 0000 0000

 

2、-20.3 转为二进制

首先负数,首位 1

其次整数部分为20 => 10100,小数0.3,

 0.3*2 = 0.6 (0)

0.6*2 = 1.2   (1)

0.2*2 = 0.4  (0)

0.4*2 = 0.8 (0)

0.8*2 = 1.6 (1)

0.6*2 = 1.2 (1)

。。。。

所以为 10100 . 010011001 ... 1001循环,左移4位为1  .  01000100110011001100110 正好符合规则,

所以最终尾数为 010 0010 0110 0110 0110 0110

最后指数位:2^(8-1)-1+4 = 131 => 1000 0011

最终二进制为 1 1000 0011 010 0010 0110 0110 0110 0110

 

三 转为浮点数示例

1、 1 1000 0011 010 0001 0000 0000 0000 0000

首先首位1,负数

其次指数位 1000 0011 为131,131-127=4,左移了4位

最后尾数位 010 0001 0000 0000 0000 0000,则 1. 010 0001 0000 0000 0000 0000,右移四位,10100 . 001 0000 0000 0000 0000,

则 10100 为 20,001 0000000000... :

   0*2^(-1)+0*2^(-2)+1*2^(-3) = 0.125,

所以最终为20.125

 

四 java处理

//浮点数转为二进制
float f = 20.3f;
int i = Float.floatToIntBits(f);
System.out.println(Integer.toBinaryString(i));

 

 

 

你可能感兴趣的:(java)