Java基礎類型與其二進位表示

來源:互聯網
上載者:User

Java中的基礎類型有:byteshortintlongfloatdoublecharboolean

它們可被分為四種類型,整型、浮點型、char型和boolean型。

整型:byteshortintlong 分別佔用1、2、4、8個位元組的空間;

浮點型:longfloat 分別佔用4、8個位元組;

char型:char 佔用2個位元組;

boolean型:boolean 佔用1位。

在Java中不能直接使用二進位表示數字,可以使用8進位或者16進位來間接表示。這些數字類型在電腦中是如何表示的哪?通過下面的代碼大家可以看個大概,具體為什麼會這樣大家可以看看我部落格上“電腦中如何表示數字”的那幾篇文章,其實這段代碼主要是為了配合那幾篇文章而來的。

至於char型在後面要單獨介紹,因為Java中的char型是很獨特的,它會佔用兩個位元組的空間。boolean就用不著介紹了,但要記住和c不同,Java中的boolean型和整數沒有關係,它們之間無法進行轉換。

public class PrimitiveType {
    public static void main(String[] args){
        //java中整型數計算採用補碼,可以通過十六進位或者八進位形式對整型數直接賦值,java中不能

        //直接使用位元
        //byte
        byte maxByte=0x7f;
        System.out.println("最大byte:0x7f  真值:"+maxByte);
        byte minByte=(byte) 0x80;
        System.out.println("最小byte:0x80  真值:"+minByte);

        //short
        short maxShort=0x7fff;
        System.out.println("最大short:0x7fff  真值:"+maxShort);
        short minShort=(short) 0x8000;
        System.out.println("最小short:0x8000  真值:"+minShort);

        //int
        int maxInt=0x7fffffff;
        System.out.println("最大int:0x7fffffff  真值:"+maxInt);
        int minInt=0x80000000;
        System.out.println("最小int:0x80000000  真值:"+minInt);

        //long
        System.out.println("最大long:0x7fffffffffffffff  真值:"+

                                                        Long.decode("0x7fffffffffffffff"));
        System.out.println("最小long:0x8000000000000000  真值:"+

                                                        Long.decode("-0x8000000000000000"));
        //算是一個bug吧,補碼錶示已經是帶符號的數字了

        //java中對小數直接量預設為double類型,定義float型需要在小數後面加上字母F,大小寫不限
        float f=0.1F;
        double d=0.1D;//定義double,在小數後面也可以加D,大小寫不限

        //---------------------Java中浮點數計算都遵循IEEE754規範-------------------------//
        //與整型數不同,浮點數在java中無法直接通過十六進位或者八進位形式定義
        //最大正數(0 11111110 11111111111111111111111)=(0x7f7fffff)
        float maxPositiveNumber=Float.intBitsToFloat(0x7f7fffff);
        System.out.println("最大正單精確度浮點數:0x7f7fffff  真值:"+maxPositiveNumber);
        //最小正數(0 00000001 00000000000000000000000)=(0x00800000)
        float minPositiveNumber=Float.intBitsToFloat(0x00800000);
        System.out.println("最小正單精確度浮點數:0x00800000  真值:"+minPositiveNumber);

        //0,IEEE754 規定 E=0 M=0,則值為0,(0 00000000 00000000000000000000000)=(0x00000000)
        float positoveZero=Float.intBitsToFloat(0x00000000);
        System.out.println("正零:"+positoveZero);
        float negativeZero=Float.intBitsToFloat(0x80000000);
        System.out.println("負零:"+negativeZero);

        //最大負數(1 00000001 00000000000000000000000)=(0x80800000)
        float maxNegativeNumber=Float.intBitsToFloat(0x80800000);
        System.out.println("最大負單精確度浮點數:0x80800000  真值:"+maxNegativeNumber);
        //最小負數(1 11111110 11111111111111111111111)=(0xff7fffff)
        float minNegativeNumber=Float.intBitsToFloat(0xff7fffff);
        System.out.println("最小負單精確度浮點數:0xff7fffff  真值:"+minNegativeNumber);

        //NaN,非數值,JDK API doc 上面也有提到
        System.out.println("NaN:E=255 M0  例如:0x3f800001  運行結果:"+

                            Float.intBitsToFloat(0x7f800001));
        //POSITIVE_INFINITY,正無窮大
        System.out.println("POSITIVE_INFINITY:S=0 E=255 M=0  0x7f800000  運行結果:"+

                            Float.intBitsToFloat(0x7f800000));
        //NEGATIVE_INFINITY,負無窮大
        System.out.println("NEGATIVE_INFINITY:S=0 E=255 M=0  0xff800000  運行結果:"+

                            Float.intBitsToFloat(0xff800000));
        //雙精確度浮點數同理可得

        //下面對char型進行討論
        char[] codeUnits;
        //基本多語言層級 basic multilingual plane
        //ASC2 code
        for(int i = 0 ; i             codeUnits = Character.toChars(i);
            if( codeUnits.length == 1 ){
                System.out.println(i+" "+(char)i);
            }
        }

        //漢字 '嚴'
        char yan = '/u4e25';
        codeUnits = Character.toChars(0x4e25);
        System.out.printf("漢字:"+yan+"  代碼點所佔代碼單元長度"+codeUnits.length+

                          " (0x%x) ,它屬於基本多語言層級。/n",(int)codeUnits[0]);

        //輔助字元 supplementary character
        //代碼點0x1d56b
        codeUnits = Character.toChars(0x1d56b);
        //判斷代碼單元的高低位
        System.out.printf("代碼點0x%x 在UTF-16表示中被分解為兩個代碼單元 0x%x 0x%x /n",

                           0x105600,(int)codeUnits[0],(int)codeUnits[1]);
        System.out.printf("0x%x is HighSurrogate:"+Character.isHighSurrogate(codeUnits[0])+

                          "/n",(int)codeUnits[0]);
        System.out.printf("0x%x is HighSurrogate:"+Character.isHighSurrogate(codeUnits[1])+

                          "/n",(int)codeUnits[1]);
        System.out.printf("0x%x is LowSurrogate:"+Character.isLowSurrogate(codeUnits[0])+"/n",

                          (int)codeUnits[0]);
        System.out.printf("0x%x is LowSurrogate:"+Character.isLowSurrogate(codeUnits[1])+"/n",

                          (int)codeUnits[1]);
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.