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

2022-08-31 20:53:27

为什么被认为是超出范围的int,但及以下则不是?0807


答案 1

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

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

例如:

010 ==  8
024 == 20

由于八进制文字通常不是您想要的,因此您应该始终注意永远不要以 开始整数文字,除非您实际上实际上试图自己写零。0


答案 2

任何以 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种类型的人,那些理解三元的人,那些不理解的人,以及那些认为这是一个愚蠢的笑话的人。