1

这是怎么回事,System.out.println(052)System.out.println(0x2a)打印42?

这与二进制有关系吗?

4

5 回答 5

7

052八进制(以 8 为基数)文字。
0x2a十六进制(以 16 为基数)文字。

于 2012-08-27T18:18:45.470 回答
4

System.out.println(0x2a)使用十六进制文字(0x前缀表示这一点),其十进制等效于42.

System.out.println(052)使用八进制文字(前导0表示这一点),它的十进制等效值为42.

System.out.println将根据十进制表示打印整数。如果您想保留十六进制,请尝试System.out.printf("%x\n", 0x2a),或者,对于八进制,"%o"代替"%x".

于 2012-08-27T18:19:07.683 回答
2

052,0x2a并且42都是写(十进制,以10为底)数字42的不同方式:

  • 052八进制,或以8为底
  • 0x2a十六进制,或以16为基数
  • 42是熟悉的小数,以10为底

java 允许您在代码中使用这些不同格式中的任何一种直接使用数字:使用前导0x指定十六进制,或使用前导零0指定八进制。

这与二进制有关,因为您对 java 所做的任何事情都与二进制有关。

顺便说一句, 42 的二进制以2为基数的表示是:101010. 您还可以在 java 中使用二进制文字,方法是在它们前面加上0b, 所以0b101010 == 0x2a.

于 2012-08-27T18:19:34.077 回答
1

052,从 0 开始,所以它是一个八进制数,因此 8*5+2=42 0x2a 从 0x 开始,所以它是一个十六进制数,因此 16*2+a = 32 + 10=42

于 2012-08-27T18:20:31.320 回答
1

052是八进制文字,等价于0 * 8^2 + 5 * 8^1 + 2 * 8^0. 0x2a是一个十六进制文字,等价于2 * 16^1 + 10 * 16^0.

5 * 8 + 22 * 16 + 10可以看作是等价的,as5 * 8等价于4 * 8 + 8,并且8 + 2等于10

于 2012-08-27T18:23:17.973 回答