1. 程式人生 > >浮點數轉換二進位制

浮點數轉換二進位制

浮點數在計算機中儲存也是以二進位制的形式,遵循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));