八进制值将其分配给int

时间:2015-09-18 06:35:20

标签: java

在测验中,我发现了一个问题,我需要计算出以下程序

 public static void main(String[] args) {
    short x = 0;
    int b = 08; 
    x +=b;

    System.out.println("" + b + x );
}

它在

上出现编译错误
 int b = 08;

因为它是八进制值,所以我尝试了一些不同的值

 int b = 07 // working fine (decimal of same is 7)
 int b = 08 // (Decimal value 8) // Compilation error
 int b = 09 // (Decimal value 9) // Compilation error
 int b = 010 // (Decimal value 8) // No Compilation error

由于08和010具有相同的十进制数,因此08为什么会出现编译错误。

5 个答案:

答案 0 :(得分:5)

因为在八进制表示法中,010!= 08。实际上,八进制数字系统中不存在08。您可以使用的只是数字0-7(以0开头)。

答案 1 :(得分:4)

所有以0开头的整数文字都被视为八进制。

但是,八进制数字可以包含从07的数字,包括在内。

这就是为什么你得到0809的编译错误,而不是010的编译错误。

答案 2 :(得分:3)

这是因为八进制表示法只能包含数字0,1,2,3,4,5,67

使用0启动整数文字时,将其标记为八进制数。但是数字8在八进制表示法中无效,因此编译器会给出错误。

例如,十进制8以八进制写为010,十进制9为八进制011

答案 3 :(得分:2)

因为八进制中没有数字8。您只有8个不同的数字:0,1,2,3,4,5,6和7。

答案 4 :(得分:0)

来自JLS jls-OctalNumeral

  

八进制数字由ASCII数字0后跟一个或多个以下划线散布的ASCII数字0到7组成,并且可以表示正整数,零或负整数。

     

<强> OctalDigit:
  (其中一个)
  0 1 2 3 4 5 6 7

这就是为什么您为0809

收到编译错误的原因