2011-05-02 46 views
1

當我運行這個程序時,它輸出-43。java整數處理

public class Main { 
    public static void main(String[] args) { 
     int a=053; 
     System.out.println(a); 
    } 
} 

這是爲什麼? 053如何變成-43?

回答

6

我不知道它是如何變成負數,但用0開始一個整數指定它是八進制(基數爲八)。基數爲8的53爲基數爲10的43

+0

+1這正是我心中的 – MByD 2011-05-02 04:35:21

+1

順便說一句,在我的機器,它返回43,而不是-43 – MByD 2011-05-02 04:36:26

1

它打印出43,而不是-43。這是因爲如果你寫一個前導0的數字,它是一個八進制常數。

從這裏,http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

INT octVal = 032; //數26,八進制

+0

人們在這裏是快速的 – sbridges 2011-05-02 04:39:13

+0

Nahhh ...我只是在這個星球的另一邊從最近的SOF服務器......我從來沒有提供任何問題的第一個答案,我也不指望......在我看到它之前幾分鐘,問題是(我懷疑)。 – corlettk 2011-05-02 04:40:42

0

這從谷歌上搜索「如何八進制轉換爲十進制」

八進制轉換爲十進制

  1. 從0開始。
  2. 小數結果中去除最顯著八進制數字(最左邊)和將其添加到結果中。
  3. 如果所有的八進制數字已被刪除,您就完成了。停止。
  4. 否則,由8
  5. 轉到相乘的結果執行步驟2

所以0 + 5 = 5,5 * 8 = 40,40 + 3 = 43

0

作爲http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.1說:

八進制標記由一個ASCII數字0,接着的ASCII數字0到7用下劃線散佈一個或多個 ,並且可以 表示正,零或負整數。

其格式爲:

OctalNumeral: 
    0 OctalDigits 
    0 Underscores OctalDigits 

所以,如果你使用

int octVal = 053; 

,或者

int octVal = 0_53; 

他們兩個,你會得到43。