在Java中關於二進制、八進制、十六進制的辨析


八進制數中不可能出7以上的阿拉伯數字。但如果這個數是123、是567,或12345670,那么它是八進制數還是10進制數?單從數字的角度來講都有可能!

八進制

所以在Java中規定,一個數如果要指明它采用八進制,必須在它前面加上一個0,如:123是十進制,但0123則表示采用八進制。這就是八進制數的表達方法。
123如果是十進制的話是123,八進制的話,則是83,如在變量賦值時可以以十進制的方式賦值int a = 83; 也可以以八進制的方式賦值,int a= 0123;得到的是同樣的結果。

十六進制

如果不使用特殊的書寫形式,16進制數也會和10進制相混。隨便一個數:9876,就看不出它是16進制或10進制。
16進制數必須以 0x開頭。比如 0x1表示一個16進制數。而1則表示一個十進制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不區分大小寫。(注意:0x中的0是數字0,而不是字母O)
如int b = 1;int b=0x1;是同樣的含義,int b = 17;與int b = 0x11;表達的是同樣的值。

不區分正負

10進制數有正負之分,比如12表示正12,而-12表示負 12。 但8進制和16進制只能用達無符號的正整數,如果你在代碼中里:-078,或者寫:-0xF2,編譯器並不把它當成一個負數。
package com.lingyejun.blog;

public class HexNum {

    public static void main(String[] args) {
        int a10 = 99;
        int a2 = 0b101;
        int a8 = 0143;
        int a16 = 0x63;
        System.out.println(a10);
        System.out.println(a2);
        System.out.println(a8);
        System.out.println(a16);
        int ma10 = -99;
        int ma2 = -0b101;
        int ma8 = -0143;
        int ma16 = -0x63;
        System.out.println(ma10);
        System.out.println(ma2);
        System.out.println(ma8);
        System.out.println(ma16);
        char c = '李';
        System.out.println("字母A在char中的編號" + Integer.toString('A') + " " + Integer.toBinaryString('A'));
        System.out.println("字母a在char中的編號" + Integer.toString('a'));
        System.out.println("char 字符 李 用二進制表示為 :" + Integer.toBinaryString(c));
        System.out.println("char 字符 李 用八進制表示為 :" + Integer.toOctalString(c));
        System.out.println("char 字符 李 用十六進制表示為 :" + Integer.toHexString(c));
    }

}

執行結果:


免責聲明!

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



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