為什么Java中long可以自動轉換成float


Java中,long型是64位的,float型是32位的。為什么long型可以自動轉float型呢?

這里就涉及到浮點數在內存中的存儲問題了。對於byte,short,int,long四個整數類型而言,它們在內存中無一例外都是直接換算成二進制存儲的,所以我們可以直接計算出它們的最大值。二進制的第一位是符號位不計算入數值,拿byte來說,數據存儲形式就是0000-0000,一個字節占八位,除去第一位符號位外,后邊全為1的話就是0111-1111,換算成十進制答案是127.

至於為什么最小的數是-128呢,這又有講究了。計算機中負數是以補碼形式存儲的,一般說來,八位以內最小的負數應該是11111-1111,我們對其取反,結果就是1000-0000,再得到補碼即1000-0001。是的,0001,補碼是原碼除符號位外逐位取反再加一的結果,但是對於補碼而言1000-0001並不是八位二進制能表示的最小的數,最小的應該是1000-0000,對1000-0000求原碼,就得到了1001-0000-0000,即我們十進制數的-128。同樣的,對於short等其它整數類型也一樣。

那么,float類型呢?4個字節,32位,第1位是符號位(數符),即S,接下來的8位是指數域(階碼),即E,最后的23位,是小數域(尾數),即M。對於一個十進制數112.5,我們用科學計數法表示就是1.12510^2,所以呢,對於一個二進制數,我們的表示就應該是1.XXX 2X,由於第一位永遠都是1所以直接省去,因此表示為S.M*2E。所以float的取值范圍是-2128到2128,遠遠大於long的最大值。

所以java中long類型自動轉換為float類型。

簡單來說因為浮點數用科學計數法存儲的,而整數是用二進制存儲的。所以雖然long型是64位的,float型是32位,但是float型所能表示的數要遠遠大於long型。


免責聲明!

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



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