public class Test {
public static void main(String... args) {
int i=010;
System.out.print(i);
}
}
输出:
8
为什么呢?逻辑是什么?
答案 0 :(得分:27)
0
是八进制数字的前缀,就像0x
是十六进制数字的前缀一样(0b
是二进制数字的前缀,因为Java 7)。
所以010
表示1 * 81 + 0 * 80
,即8
。
答案 1 :(得分:15)
查看Java Language Specification, Chapter 3.10.1 Integer Literals
整数文字可以用十进制(十进制)表示,十六进制 (基数16),八进制(基数8),或二进制(基数2)。
八进制数字由ASCII数字0后跟一个或多个组成 ASCII数字0到7 穿插着下划线,并且可以 表示正整数,零整数或负整数。
这就是010
= 8
。
答案 2 :(得分:2)
因为010
,这里是八进制。
答案 3 :(得分:2)
整数是八进制 - 因为你在开始时有0。
答案 4 :(得分:0)
使用 0前缀表示您使用八进制数字。
答案 5 :(得分: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