Why is 08 considered an out of range int but 07 and below are not?
-
see also stackoverflow.com/questions/35521278/…bvdb– bvdb2016-02-20 11:14:07 +00:00Commented Feb 20, 2016 at 11:14
-
see also Integer with leading zeroesAndreas– Andreas2020-02-13 16:03:05 +00:00Commented Feb 13, 2020 at 16:03
-
Similar: Java: Using "08" and "09" in an arrayBasil Bourque– Basil Bourque2025-03-06 01:28:34 +00:00Commented Mar 6 at 1:28
6 Answers
In Java and several other languages, an integer literal beginning with 0 is interpreted as an octal (base 8) quantity.
For single-digit numbers (other than 08 and 09, which are not allowed), the result is the same, so you might not notice that they are being interpreted as octal. However, if you write numbers with more than one significant digit you might be confused by the result.
For example:
010 == 8
024 == 20
Since octal literals are usually not what you want, you should always take care to never begin an integer literal with 0, unless of course you are actually trying to write zero by itself.
4 Comments
0b3 - binary - "binary numbers must contain at least one binary digit" 09 - octal - "integer number too large: 09" 0xG - hexadecimal - "hexadecimal numbers must contain at least one hexadecimal digit"00 is octal for 0. You have 0 == 00 == 0b0 == 0x0 for decimal, octal, binary, hexadecimal. As already mentioned by @Stuart Cook, they don`t differ as long as you only have the least common possible single digit.Any number prefixed with a 0 is considered octal. Octal numbers can only use digits 0-7, just like decimal can use 0-9, and binary can use 0-1.
// octal to decimal
01 // 1
02 // 2
07 // 7
010 // 8
020 // 16
// octal to binary (excluding most significant bit)
01 // 1
02 // 10
07 // 111
010 // 1000
020 // 10000
There are 10 types of people, those who understand ternary, those who don't, and those who think this is a stupid joke.
1 Comment
From the Java specification:
An octal numeral consists of an ASCII digit 0 followed by one or more of the ASCII digits 0 through 7 and can represent a positive, zero, or negative integer.
Comments
In Java, if you are defining an int with a leading '0' denotes that you are defining a number in Octal.
int a = 08 is giving out of range error because there is no any number '8' in Octal. Octal provides 0-7 numbers only.
If you define a = 07 then it's not giving out of range error because the numbers '0' and '7' are within the Octal's range.
Comments
In most of programming language like Java and C/C++, the number with leading zero are interpreted as octal number. As we know octal numbers are only represented within 0 to 7 digits only. Hence numbers like 05,03,054 are valid but the numbers like 078,0348,09,08 are tends to invalid.