具體自動提升類型如上圖所示。其中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有精度限制,所以在轉換的過程中有可能丟失精度,如311111111111111L ---->3.1111111E15---->3111111100465152,在轉換回來後就丟失了精確度其次要知道float的32位是如何表示小數的(大學的電腦組成原理課程學過,但忘了,現在學習一下,希望可以記住)。 float記憶體儲存原理 http://steve.hollasch.net/cgindex/coding/ieeefloat.html(IEEE754標準)#( 1)在10進制中123.456可以被表示成1.23456 × 102 ,在二進制中10100.110可以被表示成1.0100110 × 24
(2)浮點數有精度,超過精度的數無法被表示,如0.0000000000000001就是精確到小數點後x位。 (3)IEEE浮點數有三個部分組成:符號位(S),指數位(E),尾部(M),任何數字都能以二進位表示以為S*1.M*2E
表示形式如下: Single:#(4)總結:float的表示範圍為
以上是簡述java基本型別自動轉換的詳細內容。更多資訊請關注PHP中文網其他相關文章!