为什么"010"等于8?

Jav*_*ept 7 java format binary bit-manipulation

我的简单问题是为什么:

System.out.println(010|4);
Run Code Online (Sandbox Code Playgroud)

打印"12"?我理解按位OR运算符,但为什么"010"等于8?这绝对不是恭维2的通知,那么如何解码这个数字呢?

Rei*_*eus 8

前导0表示八进制数值,因此010可以解码该值:010 = 1 * 81 + 0 * 80 = 8


jlo*_*rdo 7

查看Java语言规范,第3.10.1章整数文字

整数文字可以用十进制(基数10),十六进制(基数16),八进制(基数8)或二进制(基数2)表示.

[...]

一个八进制数字由一个ASCII数字0,随后的一个或多个的ASCII数字0至7中的用下划线穿插,并可以代表正,零或负的整数.

现在你应该明白为什么0108.