public class Test {
public static void main(String... args) {
int i=010;
System.out.print(i);
}
}
输出:
8
为什么?逻辑是什么?
public class Test {
public static void main(String... args) {
int i=010;
System.out.print(i);
}
}
输出:
8
为什么?逻辑是什么?
0
是八进制数的前缀,就像0x
是十六进制数的前缀(并且0b
是二进制数的前缀,从 Java 7 开始)。
所以的010
意思,就是。1 * 81 + 0 * 80
8
整数文字可以用十进制(以 10 为底)、十六进制(以 16 为底)、八进制(以 8 为底)或二进制(以 2 为底)来表示。
八进制数字由一个ASCII 数字 0 后跟一个或多个 ASCII 数字 0 到 7和下划线组成,可以表示正整数、零整数或负整数。
这就是为什么010
= 8
。
因为010
,这里是八进制。
整数在八进制系统中,因为您在开始时有 0。
使用0 前缀意味着您使用的是八进制数。
在 Java 和其他几种语言中,以 开头的整数文字0
被解释为八进制(以 8 为基数)数量。
如果你写的数字有一个以上的有效数字,你可能会对结果感到困惑。
// octal to decimal
01 == 1
02 == 2
07 == 7
010 == 8
020 == 16
024 == 20
// octal to binary (excluding most significant bit)
01 == 1
02 == 10
07 == 111
010 == 1000
020 == 10000
024 == 10100