float型在內存中占用的是4個字節的空間,而long型占用的是8個字節的空間。
注:float類型的范圍是:一3.403E38~3.403E38。而long類型的范圍是:-2^63~2^63-1(大概是9*10^18)。
為什么4個字節的float型的最大值會大於long型的最大值呢?
一、代碼演示1
class Demo { public static void main(String[] args) { float a=32.2f; long b=123456L; a=b; //隱式轉換 System.out.println(a); } }
輸出結果:
二、代碼演示
class Demo { public static void main(String[] args) { float a=32.2f; long b=123456L; b=a; System.out.println(a); } }
輸出結果:
三、原因解析
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個字節,但是浮點數卻比長整型的最大值要大。
四、強制類型轉換
class Demo { public static void main(String[] args) { float a=32.2f; long b=123456L; b=(long)a; System.out.println(a); } }