回覆列表
-
1 # 程式設計師遇見更好的自己
-
2 # 使用者1848526563582
long 8個位元組 float 4個位元組
為什麼float的範圍比long大?
其實,在記憶體中,float和long的儲存方式不同
long型別的資料佔8位元組,是直接按位儲存,即取值範圍時 -2^63 到 2^63-1
而float的儲存則不同,float型別數字在計算機中用4個位元組(32位)儲存。
遵循IEEE-754格式標準:
一個浮點數由3部分組成:符號位s(1位)和、指數e(8位)、底數m(23位)
-
3 # 霸天虎0606
可以
直接用(float)a轉換,只是精度會有下降,在32位系統中float有1個符號位+8個2的冪次位+23個精度位=32位,long有1個符號位+31個精度位=32位,有效數字會有損失。
float型別呢?4個位元組,32位,第1位是符號位(數符),即S,接下來的8位是指數域(階碼),即E,最後的23位,是小數域(尾數),即M。對於一個十進位制數112.5,我們用科學計數法表示就是1.125*10^2,所以呢,對於一個二進位制數,我們的表示就應該是1.XXX* 2^X,由於第一位永遠都是1所以直接省去,因此表示為S.M*2^E。所以float的取值範圍是-2^128到2^128,遠遠大於long的最大值。
所以java中long型別自動轉換為float型別。
java中的資料型別分為基本資料型別和引用資料型別,基本資料型別有boolean、byte、char、short、int、long、float、double,引用資料型別一般都通類或介面構造。
基本資料型別之間的轉換分為隱式資料型別轉換和顯式資料型別轉換,隱式資料型別轉換也叫自動型別轉換,是指由資料型別小的型別轉換為資料型別大的型別,顯式資料型別轉換也叫強制型別轉換,是指由資料型別大的型別轉換為資料型別小的型別。
我們由float、long轉換為int需要使用顯示型別轉換。float轉換為int
1、int i = (int)f1;或者 int i = (Float.valueOf(f1)).intValue();
2、long轉換為int
long l1 = 1;
int i1 = (int)l1;或者int i1 = new Long(i1).intValue()。