为什么
08
被认为是超出 int 范围,而 07
及以下则不是?在Java和其他几种编程语言中,以0
开头的整数字面量会被解释为八进制(基数为8)的数值。
对于一位数字(除了不允许的08
和09
),结果是相同的,所以你可能没有注意到它们被解释为八进制。然而,如果你写的数字有多个有效数字,你可能会对结果感到困惑。
例如:
010 == 8
024 == 20
由于八进制字面量通常不是您想要的,因此,除非您确实试图单独写零,否则始终要注意不要以0
开头的整数字面量。
0b3
- 二进制 - “二进制数必须至少包含一个二进制数字”
09
- 八进制 - “整数过大:09”
0xG
- 十六进制 - “十六进制数必须至少包含一个十六进制数字” - Timmos00
是八进制表示的 0
。对于十进制、八进制、二进制和十六进制,你有 0 == 00 == 0b0 == 0x0
。正如 @Stuart Cook 已经提到的,只要你只有最常见的单个数字,它们就没有区别。 - Zabuzard任何以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种人。
前导零表示这个数值是使用八进制表示的。8并不是一个八进制数字,就像2在二进制或G在十六进制中也是不合法的一样。
在大部分编程语言中,比如Java
和C/C++
,以0开头的数字会被解释为八进制数。我们知道八进制数只能用0
到7
这几个数字表示。因此像05
、03
、054
这些数字是有效的,但是像078
、0348
、09
、08
这些数字就是无效的。