首页 > 代码库 > Integer源码 转2进制转16进制
Integer源码 转2进制转16进制
其中有一个私有方法,toUnsignedString(int i, int shift) 是为
public static String toHexString(int i) {
return toUnsignedString(i, 4);
}
public static String toBinaryString(int i) {
return toUnsignedString(i, 1);
}
着两个方法服务的。
final static 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' }; private static String toUnsignedString(int i, int shift) { char[] buf = new char[32]; int charPos = 32; int radix = 1 << shift; int mask = radix - 1; do { buf[--charPos] = digits[i & mask]; i >>>= shift; } while (i != 0); return new String(buf, charPos, (32 - charPos)); }以559转为16进制为例:
559 二进制位 10 0010 1111;
toUnsignedString(i, 4);
1.取4位计算对应的16进制字符;
2.然后右移4位,前面补0;
重复1 ,2;
----------
mask = 15,对应 1111;
10 0010 1111 & mask = 1111 -> 15 -> digits[15] -> f;
右移4位后 00 0010 0010 & mask = 0010 -> 2 -> digits[2] -> 2;
右移4位后 00 0000 0010 & mask = 0010 -> 2 -> digits[2] -> 2;
----> 22f
同样如果转为8进制则为:toUnsignedString(i, 3);
感觉自己写的算法都弱爆了
Integer源码 转2进制转16进制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。