1. 程式人生 > >為什麼Java中的float型最大值大於long型?

為什麼Java中的float型最大值大於long型?

文章目錄


問題:float是32位,long是64位,為什麼float表示的範圍比long大呢?

原因:

原因是,float與long在記憶體中的儲存方式不一樣。

long在記憶體中直接用64為儲存:

long在記憶體中是用64為儲存,所以大小為-2^63 ~ 2^63-1。

然而float是用浮點數表示法表示的,如下:
在這裡插入圖片描述
float計算公式:(-1)s*M*2E 1
由於單精度的階碼E是8位,尾數M是23為,數符是1位
尾數M是一個定點小數,其表示如下:
在這裡插入圖片描述


計算方法為:
-[1-2-(n-1)]~+[1-2-(n-1)]

所以float的最大值為:(1-2-22)*2127 (127是28-1-1),這裡遠超263了,所以float的表示範圍大於long。這個就是為什麼寬化型別轉換時可以從long或int轉換為float的原因。下面這個不會報錯
在這裡插入圖片描述

參考

link


  1. (N)R=(+/-) mn-1…m0.m1…m-k=(+/-)M*R(+/-)E,M為尾數,E為階,R為基數。 ↩︎