亚洲中文日韩国产一区|亚洲国产精品原创巨作AV无遮挡|色依依国内精品中文字幕|日韩精品免费在线视频

<button id="lyzxa"><option id="lyzxa"><em id="lyzxa"></em></option></button>
    java語言

    Java中float類型的范圍及其與十六進制的轉換方法

    時間:2024-06-18 15:30:14 java語言 我要投稿
    • 相關推薦

    Java中float類型的范圍及其與十六進制的轉換方法

      float占用4個字節(jié),和int是一樣,也就是32bit。

      第1個bit表示符號,0表示正數(shù),1表示負數(shù),這個很好理解,不用多管。

      第2-9個bit表示指數(shù),一共8為(可以表示0-255),這里的底數(shù)是2,為了同時表示正數(shù)和負數(shù),這里要減去127的偏移量。這樣的話范圍就是(-127到128),另外全0和全1作為特殊處理,所以直接表示-126到127。

      剩下的23位表示小數(shù)部分,這里23位表示了24位的數(shù)字,因為有一個默認的前導1(只有二進制才有這個特性)。

      最后結果是:(-1)^(sign) * 1。f * 2^(exponent)

      這里:sign是符號位,f是23bit的小數(shù)部分,exponent是指數(shù)部分,最后表示范圍是(因為正負數(shù)是對稱的,這里只關心正數(shù))

      2^(-126) ~~ 2(1-2^(-24)) * 2^127

      這個還不是float的取值范圍,因為標準中還規(guī)定了非規(guī)格化表示法,另外還有一些特殊規(guī)定。

      非規(guī)格化表示:

      當指數(shù)部分全0而且小數(shù)部分不全0時表示的是非規(guī)格化的浮點數(shù),因為這里默認沒有前導1,而是0。

      取值位0。f * 2^(-126),表示范圍位 2^(-149)~~ (1-2^(-23)) * 2^(-126) 這里沒有考慮符號。這里為什么是-126而不是-127? 如果是-127的話,那么最大表示為

      2^(-127)-2^(-149),很顯然2^(-127) ~~2^(-126) 就沒法表示了。

      其他特殊表示

      1。當指數(shù)部分和小數(shù)部分全為0時,表示0值,有+0和-0之分(符號位決定),0x00000000表示正0,0x80000000表示負0。

      2。指數(shù)部分全1,小數(shù)部分全0時,表示無窮大,有正無窮和負無窮,0x7f800000表示正無窮,0xff800000表示負無窮。

      3。指數(shù)部分全1,小數(shù)部分不全0時,表示NaN,分為QNaN和SNaN,Java中都是NaN。

      結論:

      可以看出浮點數(shù)的取值范圍是:2^(-149)~~(2-2^(-23))*2^127,也就是Float。MIN_VALUE和Float。MAX_VALUE。

    【Java中float類型的范圍及其與十六進制的轉換方法】相關文章:

    Java數(shù)據(jù)類型轉換03-19

    使用Java的枚舉類型的方法04-03

    java的應用范圍03-20

    JAVA中STRING的常用方法總結04-04

    Java編程中異常處理的方法12-16

    Java編程中獲取路徑的方法12-03

    從Java的jar文件中如何讀取數(shù)據(jù)的方法04-03

    Java語言的產(chǎn)生及其特點03-29

    C語言基礎之數(shù)據(jù)類型轉換11-28