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

2021-07-04 15:35:03 字數 917 閱讀 4091

最為乙個常識,我們都知道浮點型在記憶體中占用的是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 然而,現在需求發生變化。客...