私は次のコードを書こうとしていますが、エラーが発生して親切に助けてくれます。
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;
8進数は8進数のシステムなので、0から7までの数字を使用できます。8進数システムでは数字8(および9も)を使用できません。
なぜ私は変数に018と019を与えることができないのですか?.
0
が前に付いた整数リテラルは8進数として扱われ、「8」と「9」は有効な8進数ではないためです。
JLSのセクション3.10.1 から:
8進数はASCII数字0の後に1つ以上のASCII数字0から7をアンダースコアで区切ったもので構成され、正のゼロを表すことができます。 、または負の整数。
8進数で「8」を使おうとすることは、16進数で「G」を使おうとするようなものです...それは、そのベースで使用されるシンボルのセットの一部ではない単純なものです。
// 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);
8進数(8を底とする)は、01234567
の数字のみを使用できます。 10進数(基数10)が0123456789
のみを使用できるのと同じ方法。
したがって、8進数表現では、17 + 1
は20
です。
接頭辞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);
}
}
なぜ私は変数に018と019を与えることができないのですか?私は変数に値020と021を与えることができます。
先頭のゼロは8進数リテラルを示します。しかしながら、 8
および9
は有効な8進数ではありません。これは018
および019
が無効です。
8進数であるため、8進数には8
桁の0
から7
までの数字があります。同じ理由で、12
は無効な2進数になります。
9
と18
の通常の10進数を使用するには、少なくとも基数19
が必要です。