这是怎么回事,System.out.println(052)
都System.out.println(0x2a)
打印42?
这与二进制有关系吗?
System.out.println(0x2a)
使用十六进制文字(0x
前缀表示这一点),其十进制等效于42
.
System.out.println(052)
使用八进制文字(前导0
表示这一点),它的十进制等效值为42
.
System.out.println
将根据十进制表示打印整数。如果您想保留十六进制,请尝试System.out.printf("%x\n", 0x2a)
,或者,对于八进制,"%o"
代替"%x"
.
052
,0x2a
并且42
都是写(十进制,以10为底)数字42的不同方式:
052
是八进制,或以8为底0x2a
是十六进制,或以16为基数42
是熟悉的小数,以10为底java 允许您在代码中使用这些不同格式中的任何一种直接使用数字:使用前导0x
指定十六进制,或使用前导零0
指定八进制。
这与二进制有关,因为您对 java 所做的任何事情都与二进制有关。
顺便说一句, 42 的二进制以2为基数的表示是:101010
. 您还可以在 java 中使用二进制文字,方法是在它们前面加上0b
, 所以0b101010 == 0x2a
.
052,从 0 开始,所以它是一个八进制数,因此 8*5+2=42 0x2a 从 0x 开始,所以它是一个十六进制数,因此 16*2+a = 32 + 10=42
052
是八进制文字,等价于0 * 8^2 + 5 * 8^1 + 2 * 8^0
.
0x2a
是一个十六进制文字,等价于2 * 16^1 + 10 * 16^0
.
5 * 8 + 2
和2 * 16 + 10
可以看作是等价的,as5 * 8
等价于4 * 8 + 8
,并且8 + 2
等于10
。