为什么08
被视为超出范围int但07
及以下不是?
答案 0 :(得分:65)
在Java和其他几种语言中,以0
开头的整数文字被解释为八进制(基数为8)。
对于一位数字(08
和09
除外)(不允许),结果相同,因此您可能不会注意到它们被解释为八进制。但是,如果您编写的数字超过一个有效数字,您可能会对结果感到困惑。
例如:
010 == 8
024 == 20
由于八进制文字通常不是你想要的,你应该注意永远不要用0
开始一个整数文字,除非你实际上是在尝试自己写零。
答案 1 :(得分:14)
前缀为0的任何数字都被视为八进制。八进制数字只能使用数字0-7,就像十进制可以使用0-9,二进制可以使用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
有10种类型的人,那些了解三元的人,那些不了解的人,以及那些认为这是一个愚蠢的玩笑的人。
答案 2 :(得分:4)
八进制数字由ASCII数字0后跟一个或多个ASCII数字0到7组成,可以表示正整数,零或负整数。
答案 3 :(得分:2)
前导零表示值为八进制。 8不是八进制数字,二进制数不超过2或G十六进制有效。
答案 4 :(得分:2)
在 Java 中,如果您要定义一个带有前导' 0'表示您在八进制中定义一个数字。
int a = 08 超出范围错误,因为没有任何数字' 8'在八进制。 八进制仅提供0-7个数字。
如果您定义 a = 07 ,那么它不会超出范围错误,因为数字' 0'和' 7'在八达的范围内。
答案 5 :(得分:1)
在大多数编程语言中,如Java
和C/C++
,前导零的数字被解释为octal number。我们知道八进制数仅仅表示在0
到7
个数字内。因此,05
,03
,054
等数字有效,但078
,0348
,09
,08
等数字是有效的往往无效。