2013-07-16 18 views
2

我上以下行收到錯誤給值:爲什麼會這樣對錯誤而在下面的方式

a=9; 

short a; 
a=09; 

,而不是「類型不匹配不能從int轉換爲短」。

+0

短只有2個字節長,也許這就是給你一個問題,再加上09!= 9 AFAIK – Broak

+2

如果你把0放在數字之前,它通常意味着八進制符號。那麼07仍然意味着十進制的7,但是例如010將意味着十進制的8。因此,千萬不要在任何數字之前加零,以便在任何語言中使代碼變得更漂亮。 – nio

+2

你見過http://stackoverflow.com/questions/565634/integer-with-leading-zeroes? – sandrstar

回答

4

在數字之前使用意味着它是八進制數。你只能使用它從00到07,所以你不能進行轉換(它也不適用於int,因爲它超出範圍,即使它看起來像試圖進行隱式轉換)。

只是一個不存在的數字,從計算上來說。

2

要專門回答你的問題,這是一個編譯器的特點。一個不同的編譯器(可能只是一個不同的版本)會給你一個不太容易混淆的錯誤,比如整數太大:09而不是跳到劇組,這在你的情況下是不可能的,因爲編號是無效的。

在你的代碼的問題是,你想,因爲你是一個領先的0八進制數字開始數只能介於定義在八進制整數(或你的情況很短) 0和7。所以寫成09的八進制數不存在。

所以這兩件事情結合在一起使您的編譯器有點困惑。

相關問題