最近在刷剑指offer,需要用到十进制转换成二进制的方法。
Integer类中有静态方法:
toBinaryString(int i):返回int变量的二进制表示的字符串。
toHexString(int i):返回int变量的16进制字符串。
toOctalString(int i):返回int变量的8进制表示字符串。
具体用法:
以toBinaryString(int i)
为例,将整数n转换成字符串(二进制)。
String str = Integer.toBinaryString(n)
源码部分
三种静态方法都使用了同一个函数toUnsignedString0(int val, int shift)
得到返回值,函数源码如下:
private static String toUnsignedString0(int val, int shift) {
// assert shift > 0 && shift <=5 : "Illegal shift value";
int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);
int chars = Math.max(((mag + (shift - 1)) / shift), 1);
char[] buf = new char[chars];
formatUnsignedInt(val, shift, buf, 0, chars);
// Use special constructor which takes over "buf".
return new String(buf, true);
}
代码分为两步:
1.计算出二/八/十六进制的字符数组的长度
2.使用formatUnsignedInt
方法填充字符数组,得到所需进制表示的字符串并返回。