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