Java中為什麼float型最大值大於long型?
阿新 • • 發佈:2019-02-18
最為一個常識,我們都知道浮點型在記憶體中佔用的是4個位元組的空間,而long型佔用的是8個位元組的空間。可是為什麼4個位元組的float型的最大值會大於long型的最大值呢?
我們都知道,float型別的範圍是:一3.403E38~3.403E38。而long型別的範圍是:-2^63~2^63-1(大概是9*10^18)。
我以前也是簡單的記住就算完事了,對於它為什麼會這樣卻沒有考慮過。
下面給大家分享一下我現在的理解:
long整型數,在記憶體中佔用8個位元組共64位,它表示的數值有2的64次方,平分正負,數值範圍是負2的63
而float在記憶體中佔4個位元組,共32位,但是浮點數在記憶體中是這樣的:
V=(-1)^s * M * 2^E
浮點數的32位不是簡單的直接表示大小,而是按照一定的標準分配的。
其中第1位,符號位,即S。
接下來的8位,指數域,即E。
剩下的23位,小數域,即M,M的取值範圍為[1,2)或[0,1)。
也就是說,浮點數在記憶體中的二進位制值不是直接轉換為十進位制數值的,而是按照上述公式計算而來,通過這個公式,雖然只用到了4個位元組,但是浮點數卻比長整型的最大值要大。
這也就是為什麼在資料轉換的時候,