Java 源码解析:十进制转二进制


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)];
// >>>无符号右移操作符 无符号为正还是为负 都在高位插入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

    原文作者:进制转换
    原文地址: https://blog.csdn.net/iteye_10440/article/details/82651712
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞