-5 浮點數推導
二進制轉十進制
1 10000001 01000000000000000000000
1 10000001 101000000000000000000000 如果指數位不全為 0 則尾數位首位+1 ,如果指數位全為 0,則尾數位首位+0
十進制 = -1 * 2^(129-127) * (1 * 2^0 + 1 * 2^-2) = -1 * 4 * 1.25 = -5
十進制轉二進制
5 = 101(B) = 1.01 * 2^2 指數為 2,則指數段的值為 2+127 = 129 = 10000001 因為不全為 0 尾數部分首位的 1 去掉,然後右側補全 0
1 負數
1 10000001 指數段的值為 2+127=129
1 10000001 101 尾數段為 101
1 10000001 01 因為不全為 0 尾數部分首位的 1 去掉
1 10000001 01000000000000000000000 然後右側補全 0,尾數部分一共23 位
十進制(整數)轉二進制(整數)
除2取餘, (直到商為 0) ,逆序
789=1100010101(B)
394 1
197 0
98 1
49 0
24 1
12 0
6 0
3 0
1 1
0 1 (最終 商 < 1)
1100010101
推理: A = abcdef(B)
A = f * 2 ^ 0 + e * 2 ^ 1+ d * 2 ^ 2 + c * 2 ^ 3+ b * 2 ^ 4 + a * 2 ^ 5
A/2 = e * 2 ^ 0+ d * 2 ^ 1+ c * 2 ^ 2 + b * 2 ^ 3 + a * 2 ^ 4 除以 2 留餘數得到 f
.... 除以 2 留餘數得到 d
..... 除以 2 留餘數得到 a
反過來寫就是 abcdef
十進制純小數轉換成二進制純小數
乘2 取整,直到小數部分為 0(或者達到所要求的精度…),順序排列
0.8125 = (0.1101)(B)
1.6250 1
1.25 1
0.5 0
1.0 1
十進制小數轉換成二進制小數
整數部分與小數部分合并
(789.8125) = 1100010101.1101(B)
float 特殊值
|含義|數值|
|--|--|
|正無窮 | 0 11111111 00000000000000000000000 |
|負無窮 | 1 11111111 00000000000000000000000|
|NaN | 0 11111111 10000000000000000000000|
|最大浮點數 | 0 11111110 11111111111111111111111|1.11111111111111111111111 * 2^(254-127)
|最小規範化正浮點數 | 0 00000001 00000000000000000000000|1.0 * 2^1-127|
|最小正浮點數 | 0 00000000 00000000000000000000000|
|0 | 0 00000000 00000000000000000000000|
注意
- float最大精度 小數點後 6 位
- 浮點數 0.99 根本沒辦法用二進制表示 ,無窮多的 11111 隻有 0.5 倍數的可以被二進制科學計數法表示
感謝您的耐心閱讀,如果您發現文章中有一些沒表述清楚的,或者是不對的地方,請給我留言,您的鼓勵是作者寫作最大的動力。
作 者 : @mousycoder
原文出處 : http://mousycoder.com/thinking-in-jvm/3/