最為乙個常識,我們都知道浮點型在記憶體中占用的是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次方到正2的
63次方-1
。 而float
在記憶體中佔
4個位元組,共
32位,但是
浮點數在記憶體中是這樣的:
浮點數的
32位不是簡單的直接表示大小,而是按照一定的標準分配的。
其中第1位,符號位,即s。
接下來的
8位,指數域,即e。
剩下的23位,小數域,即m,
m的取值範圍為[1,
2)或[0,
1)。也就是說,浮點數在記憶體中的二進位制值不是直接轉換為十進位制數值的,而是按照上述公式計算而來,通過這個公式,雖然只用到了
4個位元組,但是浮點數卻比長整型的最大值要大。
這也就是為什麼在資料轉換的時候,
long
型別轉換為
float
型別的根本原因所在!
**:
Java中為什麼float型最大值大於long型?
最為乙個常識,我們都知道浮點型在記憶體中占用的是4個位元組的空間,而long型占用的是8個位元組的空間。可是為什麼4個位元組的float型的最大值會大於long型的最大值呢?我們都知道,float型別的範圍是 一3.403e38 3.403e38。而long型別的範圍是 2 63 2 63 1 大概...
java 為什麼要用泛型?
改用泛型可以增加可讀性和穩定性,無需強轉更便捷。比如說,list list new arraylist list.add new integer 0 integer x integer list.iterator next 上述,編譯器只能保證iterator返回的是object型別,為了保證對in...
泛型 為什麼是泛型?
需求 先需編寫乙個程式,用棧 stack 進行進棧和出棧操作,並對棧中的元素進行運算。方案一 假設元素為int型別,則可使用 code class stack public void push int x public int pop 客戶 code class test 然而,現在需求發生變化。客...