1. 程式人生 > 其它 >float 和 long 比較

float 和 long 比較

為什麼java中float表示的資料範圍比long的大?

基本型別(除了boolean外)可以自動轉換的,轉換形式為:byte,short,char – int --long–float–double這就是自動轉換的順序了,其中byte,short,char在運算時是自動轉換為int型的,而int與long運算時自動轉換為long型。從上可知,float與double運算時是自動轉換為double再進行計算的,int與float運算時先轉換為float再運算。也就是說,表述範圍小的可以自動轉換為表述範圍大的,(表述範圍不是指型別的大小)其次,如果你要得到某一型別的數值時,也可以通過強制轉換來實現

我們都知道,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位,但是浮點數在記憶體中是這樣的:

  V=(-1)^s * M * 2^E

 浮點數的32位不是簡單的直接表示大小,而是按照一定的標準分配的。

  其中第1位,符號位,即S。

  接下來的8位,指數域,即E。

  剩下的23位,小數域,即M,M的取值範圍為[1,2)或[0,1)。

  也就是說,浮點數在記憶體中的二進位制值不是直接轉換為十進位制數值的,而是按照上述公式計算而來,通過這個公式,雖然只用到了4個位元組,但是浮點數卻比長整型的最大值要大
這個情況的原因在於,float佔的4個位元組,也就是32位二進位制中,1位是符號位,23位是尾數位,剩下的8位是指數位,8位代表0~255,根據IEEE 754規定,0代表0,255代表無窮大,剩下1~254,每個減去127,代表-126~127這個指數範圍,也就是說float的冪級數大致範圍是2的-126次冪到127次冪之間,而long是8個位元組,也就是64位,除去符號位,範圍在只有2的63次冪,遠遠小於float。