在一次面试的过程中,遇到过这样的题目,题目的大概意思是:让写出Integer类中的toBinaryString()方法
也就是说,把Integer转换为Binary的过程写出来
但是我蒙的,在查了JDK的源码,发现了这个很好用的方法,在此给大伙看看
下面是我做的一个测试:
1 /** 2 * 3 */ 4 package com.b510.test; 5 6 /** 7 * @author Hongten 8 * @date 2013-12-15 9 */ 10 public class TestF { 11 12 public static void main(String[] args) { 13 //output:1000 14 System.out.println(toBinaryString(8)); 15 //printInfo(); 16 } 17 18 /** 19 * 这里是做&操作的测试,也就是说,在1&*(其中*代表其他数字,如:0,1,2,3,4...)操作的时候 20 * 他们是进行二进制之间的&(与)运算操作。只有当*为奇数(1,3,5,7...)的时候,1*&操作才可以返回:1 21 * 其他情况返回:0 22 */ 23 private static void printInfo(){ 24 for(int i =0; i< 10; i++){ 25 System.out.println("i= " + i + " "+(i & 1)); 26 } 27 /* 28 output: 29 i= 0 0 30 i= 1 1 31 i= 2 0 32 i= 3 1 33 i= 4 0 34 i= 5 1 35 i= 6 0 36 i= 7 1 37 i= 8 0 38 i= 9 1 39 */ 40 } 41 42 public static String toBinaryString(int i) { 43 return toUnsignedString(i, 1); 44 } 45 46 /** 47 * Convert the integer to an unsigned number. 48 */ 49 private static String toUnsignedString(int i, int shift) { 50 char[] buf = new char[32]; 51 int charPos = 32; 52 int radix = 1 << shift; 53 int mask = radix - 1; 54 do { 55 //这里的mask一直为:1,所以当i为奇数的时候,这里"i & mask"操作才为:1 56 //否则返回:0 57 //System.out.println(i & mask); 58 buf[--charPos] = digits[i & mask]; 59 i >>>= shift;//右移赋值,左边空出的位以0填充 60 //System.out.println(buf); 61 //System.out.println(charPos); 62 //System.out.println(i); 63 } while (i != 0); 64 return new String(buf, charPos, (32 - charPos)); 65 } 66 67 final static char[] digits = { 68 \'0\' , \'1\' , \'2\' , \'3\' , \'4\' , \'5\' , 69 \'6\' , \'7\' , \'8\' , \'9\' , \'a\' , \'b\' , 70 \'c\' , \'d\' , \'e\' , \'f\' , \'g\' , \'h\' , 71 \'i\' , \'j\' , \'k\' , \'l\' , \'m\' , \'n\' , 72 \'o\' , \'p\' , \'q\' , \'r\' , \'s\' , \'t\' , 73 \'u\' , \'v\' , \'w\' , \'x\' , \'y\' , \'z\' 74 }; 75 }
在代码中,其实我们可以简化一下digits数组,因为我们只会用到数组:digits[0],digits[1]
所以:
1 final static char[] digits = { 2 \'0\' , \'1\' 3 };
方法里面用到了移位操作和&操作,这两个操作是关键。
========================================================
More reading,and english is important.
I\'m Hongten
大哥哥大姐姐,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢。
Hongten博客排名在100名以内。粉丝过千。
Hongten出品,必是精品。
E | hongtenzone@foxmail.com B | http://www.cnblogs.com/hongten
========================================================