IntegerToBinaryString
方法写的非常的巧妙;佩服佩服!
package com.stono.jdk; public class IntegerToBinaryString { public static void main(String[] args) { integerToBinaryString(); // jdk中的方法,调用toUnsignedString方法 step1(); // 1<< shift string(); // string构造函数 integerToHexString(); // jdk中的方法,调用toUnsignedString方法 integerToUnsignedString(); // jdk中的方法,Integer中的,但是是私有的,最多还可以计算一下32进制的数字; } private static void integerToUnsignedString() { int i = 2100000000; // 输入:需要转换的数字 i = 31; i = 63; int shift = 5; // 输入:移位数量, 如果是5,那么就是32进制了; // shift = 6; // 如果是6,那么就是64进制了; digits没有这么多位数; System.out.println("digits.length: "+digits.length); // 最多也就是36位了; char[] buf = new char[32]; // 最多是32位,如果计算16进制就用不了那么多位数了; int charPos = 32; int radix = 1 << shift; int mask = radix - 1; System.out.println("mask:" + Integer.toBinaryString(mask)); do { buf[--charPos] = digits[i & mask]; // 从数组的最后一位开始赋值,这样就可以形成正常的字符串 i >>>= shift; // 无符号右移 } while (i != 0); String stringReturn = new String(buf, charPos, (32 - charPos)); // string的一种构造方法 System.out.println("charPos: "+charPos); System.out.println(buf); System.out.println(stringReturn); } private static void integerToHexString() { int i = 2100000000; // 输入:需要转换的数字 i = 11; int shift = 4; // 输入:移位数量,Hex是十六进制,这样就可以四个四个的计算 char[] buf = new char[32]; // 最多是32位,如果计算16进制就用不了那么多位数了; int charPos = 32; int radix = 1 << shift; int mask = radix - 1; System.out.println("mask:" + Integer.toBinaryString(mask)); do { buf[--charPos] = digits[i & mask]; // 从数组的最后一位开始赋值,这样就可以形成正常的字符串 i >>>= shift; // 无符号右移 } while (i != 0); String stringReturn = new String(buf, charPos, (32 - charPos)); // string的一种构造方法 System.out.println("charPos: "+charPos); System.out.println(buf); System.out.println(stringReturn); } private static void string() { String string = new String(digits,0,3); // string构造函数,从0开始,3个元素 System.out.println(string); /** The value is used for character storage. */ // private final char value[]; // 字符串中就是使用char数组来存储字符串内容的; // 这种构造函数用到了Arrays.copyOfRange,里面用到了System.arraycopy,这是个native方法 } private static void step1() { int shift = 1; int radix = 1<<shift; // 把1左移一位 System.out.println(radix); int mask = radix - 1; // 再减去1, System.out.println(mask); shift = 2; radix = 1<<shift; // 如果shift是2,左移两位 System.out.println(radix); mask = radix - 1; // 再减去1, System.out.println(mask); // 这样把shift位数的都填上1; } // jdk中的方法 private static void integerToBinaryString() { int i = 2100000000; // 输入:需要转换的数字 i = 1; int shift = 1; // 输入:移位数量 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); String stringReturn = new String(buf, charPos, (32 - charPos)); // string的一种构造方法 System.out.println("charPos: "+charPos); System.out.println(buf); System.out.println(stringReturn); System.out.println(Integer.toBinaryString(-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' }; }