为什么08不是Java中的有效整数文字?

时间:2011-08-28 02:56:24

标签: java numbers int

为什么08被视为超出范围int但07及以下不是?

6 个答案:

答案 0 :(得分:65)

在Java和其他几种语言中,以0开头的整数文字被解释为八进制(基数为8)。

对于一位数字(0809除外)(不允许),结果相同,因此您可能不会注意到它们被解释为八进制。但是,如果您编写的数字超过一个有效数字,您可能会对结果感到困惑。

例如:

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)

来自Java specification

  

八进制数字由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)

在大多数编程语言中,如JavaC/C++,前导零的数字被解释为octal number。我们知道八进制数仅仅表示在07个数字内。因此,0503054等数字有效,但07803480908等数字是有效的往往无效。