Java 如何将0X00020000转换为131072?

Java 如何将0X00020000转换为131072?,java,Java,我正在对十六进制数执行一些位操作&和 Integer number1 = 0X00020000; Integer number2 = 0X00000001; System.out.println(number1); System.out.println(number1 | number2); System.out.println(number1 + number2); Output : 131072 131073 131073 0X00020000自动转换为131072 我得到了正确的答案

我正在对十六进制数执行一些位操作&和

Integer number1 = 0X00020000;
Integer number2 = 0X00000001;

System.out.println(number1);
System.out.println(number1 | number2);
System.out.println(number1 + number2);

Output :
131072
131073
131073
0X00020000自动转换为131072

我得到了正确的答案,但我很想知道Java是如何和为什么将十六进制数转换为十进制数的

我知道如何把十六进制数转换成十进制数

0X00020000将转换为十进制,如下所示:

(2 X 16^4) + (0 X 16^3) + (0 X 16^2) + (0 X 16^1) + (0 X 16^0)
= (2 X 65536) + 0 + 0 + 0 + 0
= 131072

正确看待这一点的方式不是转换某些东西,而是显示某些东西的方式

无论如何在源代码中写入变量,都只为变量存储一个值。你想怎么写就怎么写;一旦它存储在内存中,Java就不知道也不关心它在源代码中的样子


System.out.println默认使用十进制以字符串形式呈现整数值。请尝试System.out.printf%x\n,编号1;看到它以十六进制渲染


请记住,整数值和它的字符串表示形式之间有很大的区别。如果这里有任何转换,它是从源代码中的字符串到内存中表示的整数值再到写入标准输出的字符串的转换。最后一步默认使用十进制数字。

Java不转换任何东西,0x20000只是完全相同数字的另一种表示形式。您可以将代码中的十六进制数替换为十进制数,您将得到完全相同的结果。为什么?它有0x前缀。问题是为什么它不能以十六进制表示形式打印出来?请查找Integer.toString方法,当您不明白为什么要打印smth时,请始终查找类的toString方法。二进制或十六进制格式对计算机本身更为自然,十进制格式适合有10个手指的人。System.out.printf%x\n,1号;将MissingArgumentException System.out.printlnInteger.toHexStringnumber1指定为MissingArgumentException System.out.printlnInteger.toHexStringnumber1;2万张照片不应该。请参阅以查看printf是否正常工作。你的方法也有效;他们都很好。哦,对不起,雷·托尔!!我用+代替逗号,。System.out.printf%x\n,编号1;很好。System.out.printf%x\n+number1;抛出MissingArgumentException。那是我的错误。