java基本類型自動轉換


具體自動提升類型如上圖所示。其中long->float的轉換一開始讓我感覺有點問題,因為long是64位的,而float卻是32位的。

遂找尋答案,參考博客java中long到float的自動轉換引發的血案

原因

首先要知道一點,float能表示的數的范圍比long大,那么可想而知,一個long型數可以轉為float型。

  long類型,取值范圍是-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807(-263 ~ 263-1)

  float類型,取值范圍是2^(-149) ---> (2-2^(-23))*2^127,也就是Float.MIN_VALUE和Float.MAX_VALUE

任何一個long類型的數字都可以使用float類型的表示方法來表示。但是,由於float有精度限制,所以在轉換的過程中有可能丟失精度,

如3111111111111111L ---->3.1111111E15---->3111111100465152,在轉換回來后就丟失了精度

其次要知道float的32位是如何表示小數的(大學的計算機組成原理課程學過,但忘了,現在學習一下,希望可以記住)。

 

float內存存儲原理 

http://steve.hollasch.net/cgindex/coding/ieeefloat.html(IEEE754標准)

(1)在10進制中123.456可以被表示成1.23456 × 10,在二進制中10100.110可以被表示成1.0100110 × 24

(2)浮點數有精度,超過精度的數無法被表示,如0.0000000000000001就是精確到小數點后x位。

(3)IEEE浮點數有三個部分組成:符號位(S),指數位(E),尾部(M),任何數都能以二進制表示以為S*1.M*2E

表示形式如下:
Single: SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM Double: SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM

 

(4)總結:float的表示范圍為

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM