Java中float型最大值大於long型?


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位,它表示的數值有264次方,平分正負,數值范圍是負263次方到正263次方-1float在內存中占4個字節,共32位,但是浮點數在內存中是這樣的:

V=(-1)^s * M * 2^E

浮點數的32位不是簡單的直接表示大小,而是按照一定的標准分配的。

其中第1位,符號位,即S

接下來的8位,指數域,即E

剩下的23位,小數域,即MM的取值范圍為[12)或[01)。

總之,浮點數在內存中的二進制值不是直接轉換為十進制數值的,而是按照上述公式計算而來,通過這個公式,雖然只用到了4個字節,但是浮點數卻比長整型的最大值要大。

四、強制類型轉換

class Demo {
    public static void main(String[] args) {
        
        float a=32.2f;
        long b=123456L;
        
        b=(long)a;
        
        System.out.println(a);
    }
}


免責聲明!

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



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