2013-08-05 87 views
7
public class Test { 
    public static void main(String... args) { 

     int i=010; 

     System.out.print(i); 
    } 
} 

輸出:爲什麼輸出8?

8 

爲什麼?什麼是邏輯?

+0

http://en.wikipedia.org/wiki/Octal – arshajii

回答

27

0是八進制數字的前綴,就像0x是十六進制數字的前綴(並且0b是自Java 7以來的二進制數字的前綴)。

所以010意味着1 * 81 + 0 * 80,這是8

2

該整數是八進制 - 系統,因爲您在開始時爲0。

15

看一看的Java Language Specification, Chapter 3.10.1 Integer Literals

字面一個整數,可以以十進制(底爲10),十六進制 (基數爲16),八進制(基座8),或二進制(基數爲2)來表達。

一種八進制標記由一個ASCII數字0至7隨後的ASCII數字0的一個或多個 用下劃線穿插的,並且可以 表示正,零或負的整數。

這就是爲什麼010 = 8

0

使用0前綴表示您正在使用八進制數字。

0

在Java和其他幾種語言中,以0開頭的整數文字被解釋爲八進制數(基數爲8)。

如果你寫的數字有一個以上的有效數字,你可能會被結果困惑。

// octal to decimal 
01 == 1 
02 == 2 
07 == 7 
010 == 8 
020 == 16 
024 == 20 

// octal to binary (excluding most significant bit) 
01 == 1 
02 == 10 
07 == 111 
010 == 1000 
020 == 10000 
024 == 10100