在Java中,数字输出时,默认采用十进制输出。如果想要输出二进制,八进制和十六进制,需要一些特殊的方法。本文总结了一部分可以实现的方法如下:
1. 使用Integer.toXXXString()
说明:
二进制 Integer.toBinaryString()
八进制 Integer.toOctalString()
十六进制 Integer.toHexString()
代码示例:
int num1 = 25;
// 十进制输出(默认)
System.out.println("在十进制中,num1 = " + num1);
// 二进制输出
System.out.println("在二进制中,num1 = " + Integer.toBinaryString(num1));
// 八进制输出
System.out.println("在八进制中,num1 = " + Integer.toOctalString(num1));
// 十六进制输出
System.out.println("在十六进制中,num1 = " + Integer.toHexString(num1));
输出结果:
在十进制中,num1 = 25
在二进制中,num1 = 11001
在八进制中,num1 = 31
在十六进制中,num1 = 19
2. 使用DecimalFormat,输出固定长度的二进制,八进制和十六进制
说明:
你可能已经发现,使用Integer.toXXXString()输出的二进制,八进制和十六进制结果中,前面的0默认是不显示的,但是有的时候,我们可能需要输出固定长度的结果,例如00011001而非11001,怎样在结果的前方自动补齐呢?
可以使用DecimalFormat这个类来实现。
把上面的代码示例修改一下:
代码示例:
int num1 = 25;
// 输出固定长度为8的结果
DecimalFormat df = new DecimalFormat("00000000");
// 十进制输出(默认)
System.out.println("在十进制中,num1 = " + df.format(num1));
// 二进制输出
String num1InBinaryStr = Integer.toBinaryString(num1);
Integer num1InBinaryInt = Integer.valueOf(num1InBinaryStr);
System.out.println("在二进制中,num1 = " + df.format(num1InBinaryInt));
// 八进制输出
String num1InOctalStr = Integer.toOctalString(num1);
Integer num1InOctalInt = Integer.valueOf(num1InOctalStr);
System.out.println("在八进制中,num1 = " + df.format(num1InOctalInt));
// 十六进制输出
String num1InHexStr = Integer.toHexString(num1);
Integer num1InHexInt = Integer.valueOf(num1InHexStr);
System.out.println("在十六进制中,num1 = " + df.format(num1InHexInt));
输出结果:
在十进制中,num1 = 00000025
在二进制中,num1 = 00011001
在八进制中,num1 = 00000031
在十六进制中,num1 = 00000019
3. 使用printf()输出固定长度的八进制和十六进制
说明:
还有一种方法,可以输出固定长度的八进制和十六进制结果,就是printf(),但是这个方法不能输出二进制。
代码示例:
int num1 = 25;
// 十进制输出(默认)
System.out.printf("在十进制中,num1 = %08d\n", num1);
// 八进制输出
System.out.printf("在八进制中,num1 = %08o\n", num1);
// 十六进制输出
System.out.printf("在十六进制中,num1 = %08x\n", num1);
输出结果:
在十进制中,num1 = 00000025
在八进制中,num1 = 00000031
在十六进制中,num1 = 00000019