浮點數存儲普遍使用IEEE標準.
首先要看是單精度float還是雙精度double
此處假設為單精度,雙精度類似
對float,共32位,從高位到低位分別為1位的符號位,8位階碼,23位尾數
246.15為正數,符號位為0.
246.15包含整數部分 246;小數部分0.15;
整數部分直接轉換為2進制形式:11110110b;
小數部分具體轉換比較麻煩,我給你說下我的算法:
0.15
1:2*0.15 = 0.3 ,0.3<1 第一位為0
2:2*0.3 = 0.6 ,0.6<1 第二位為0
3:2*0.6 = 1.2 ,1.2>1 第三位為1,此時要把1.2 =1.2 - 1
4:2*0.2 = 0.4 ,第四位為0,原理同上
5:2*0.4 = 0.8 ,第五位為0
6:2*0.8 = 1.6 ,第六位為1
7:2*0.6 = 1.2 ,第七位為1
8:2*0.2 = 0.4 ,第八位為0,後面的就是循環了,看第5-8步
加上整數位算夠24位 ,不夠24位用0補夠,此處小數位算16位, 算出來的結果應該為0010 0110 0110 0110b;
此時便可轉換246.15為二進制形式11110110.0010 0110 0110 0110
也可表示成1.111 0110 0010 0110 0110 0110b * 2^7;
注意指數為7,解碼為8位2進制數,此數即可表示正也可表示負,約定把指數+(2^7-1)作為階碼
就是 7 +(2^7-1) = 134 = 10000110b作為階碼
科學計數法第一位都為1,在IEEE標準中可以省略
此時就得出了246.15的IEEE形式:
符號位 0b
階碼 10000110b
尾數 111 0110 0010 0110 0110 0110b
組合起來就是 0 10000110 111 0110 0010 0110 0110 0110b
轉為16進製為 0x43762666;
當然一般情況下是不需要進行手動的轉換的
浮點數存儲普遍使用IEEE標準.
首先要看是單精度float還是雙精度double
此處假設為單精度,雙精度類似
對float,共32位,從高位到低位分別為1位的符號位,8位階碼,23位尾數
246.15為正數,符號位為0.
246.15包含整數部分 246;小數部分0.15;
整數部分直接轉換為2進制形式:11110110b;
小數部分具體轉換比較麻煩,我給你說下我的算法:
0.15
1:2*0.15 = 0.3 ,0.3<1 第一位為0
2:2*0.3 = 0.6 ,0.6<1 第二位為0
3:2*0.6 = 1.2 ,1.2>1 第三位為1,此時要把1.2 =1.2 - 1
4:2*0.2 = 0.4 ,第四位為0,原理同上
5:2*0.4 = 0.8 ,第五位為0
6:2*0.8 = 1.6 ,第六位為1
7:2*0.6 = 1.2 ,第七位為1
8:2*0.2 = 0.4 ,第八位為0,後面的就是循環了,看第5-8步
加上整數位算夠24位 ,不夠24位用0補夠,此處小數位算16位, 算出來的結果應該為0010 0110 0110 0110b;
此時便可轉換246.15為二進制形式11110110.0010 0110 0110 0110
也可表示成1.111 0110 0010 0110 0110 0110b * 2^7;
注意指數為7,解碼為8位2進制數,此數即可表示正也可表示負,約定把指數+(2^7-1)作為階碼
就是 7 +(2^7-1) = 134 = 10000110b作為階碼
科學計數法第一位都為1,在IEEE標準中可以省略
此時就得出了246.15的IEEE形式:
符號位 0b
階碼 10000110b
尾數 111 0110 0010 0110 0110 0110b
組合起來就是 0 10000110 111 0110 0010 0110 0110 0110b
轉為16進製為 0x43762666;
當然一般情況下是不需要進行手動的轉換的