这是怎么回事,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。