class="java" name="code">
static final char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
public static String toBinaryString(int paramInt){
return toUnsignedString(paramInt, 1);
}
private static String toUnsignedString(int paramInt1, int paramInt2){
char[] arrayOfChar = new char[32];
int i = 32;
// 此处按二进制 1左移 1 位 为2
int j = 1 << paramInt2;
int k = j - 1;
do {
// paramInt1 & k k=1,偶数 & 1 = 0,奇数 & 1 = 1
arrayOfChar[(--i)] = digits[(paramInt1 & k)];
// >>>无符号右移caozuofu.html" target="_blank">操作符 无符号为正还是为负 都在高位插入0
paramInt1 >>>= paramInt2;
}while (paramInt1 != 0);
// public String(byte[] bytes,int offset, int length)
// bytes - 要解码为字符的 byte
// offset - 要解码的第一个 byte 的索引
// length - 要解码的 byte 数
// 从第offset的索引开始 解码长度为length
return new String(arrayOfChar, i, 32 - i);
}
toBinaryString(2);//调用下分析
2的二进制为0000 0000 0000 0000 0000 0000 0000 0010
arrayOfChar[31] = digits[2&1] = '0'
2 >>> 1 为 0000 0000 0000 0000 0000 0000 0000 0001
paramInt1 = 1
arrayOfChar[30] = digits[1&1] = '1'
1 >>> 1 为 0
循环终止
new String(arrayOfChar,30,2) 其实就是new String(new char[2])
char[0] = arrayOfChar[30]
char[1] = arrayOfChar[31]
返回String 10