web-dev-qa-db-ja.com

Javaで8進数の値を設定する方法は?

私は次のコードを書こうとしていますが、エラーが発生して親切に助けてくれます。

    int six=06;
    int seven=07;
    int abc=018;
    int nine=011;
    System.out.println("Octal 011 ="+nine);
    System.out.println("octal O18 =" + abc);

なぜ私は変数に018と019を与えることができないのですか?私は変数に値020と021を与えることができます。なぜこれが起こるのですか?この背後にある理由は何ですか親切に教えてください。
以下のエラーが発生しました

            integer number too large: 018
            int eight=018;
9
Kapil

8進数は8進数のシステムなので、0から7までの数字を使用できます。8進数システムでは数字8(および9も)を使用できません。

29
mulya

なぜ私は変数に018と019を与えることができないのですか?.

0が前に付いた整数リテラルは8進数として扱われ、「8」と「9」は有効な8進数ではないためです。

JLSのセクション3.10.1 から:

8進数はASCII数字0の後に1つ以上のASCII数字0から7をアンダースコアで区切ったもので構成され、正のゼロを表すことができます。 、または負の整数。

8進数で「8」を使おうとすることは、16進数で「G」を使おうとするようなものです...それは、そのベースで使用されるシンボルのセットの一部ではない単純なものです。

20
Jon Skeet
// Decimal declaration and possible chars are [0-9]
int decimal    =  495;        

// HexaDecimal declaration starts with 0X or 0x and possible chars are [0-9A-Fa-f]
int hexa       =  0X1EF; 

// Octal declaration starts with 0 and possible chars are [0-7] 
int octal      =  0757;  

// Binary representation starts with 0B or 0b and possible chars are [0-1]  
int binary     =  0b111101111; 

数値が文字列形式の場合は、以下を使用してintに変換できます。

String text = "0b111101111";
int value = text.toLowerCase().startsWith("0b") ? Integer.parseInt(text.substring(2), 2)
                                  : Integer.decode(text);
17

8進数(8を底とする)は、01234567の数字のみを使用できます。 10進数(基数10)が0123456789のみを使用できるのと同じ方法。

したがって、8進数表現では、17 + 120です。

7
assylias

接頭辞0は、8進数(8基)(数字0〜7)を示します。

public class MainClass{

  public static void main(String[] argv){

    int intValue = 034;  // 28 in decimal
    int six = 06; // Equal to decimal 6
    int seven = 07; // Equal to decimal 7
    int eight = 010; // Equal to decimal 8
    int nine = 011; // Equal to decimal 9

    System.out.println("Octal 010 = " + eight);

  }

}
6
Owen Cao

なぜ私は変数に018と019を与えることができないのですか?私は変数に値020と021を与えることができます。

先頭のゼロは8進数リテラルを示します。しかしながら、 8および9は有効な8進数ではありません。これは018および019が無効です。

6
NPE

8進数であるため、8進数には8桁の0から7までの数字があります。同じ理由で、12は無効な2進数になります。

918の通常の10進数を使用するには、少なくとも基数19が必要です。

3
Jack