在一次面试的过程中,遇到过这样的题目,题目的大概意思是:让写出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 };
方法里面用到了移位操作和&操作,这两个操作是关键。
E | hongtenzone@foxmail.com B | http://www.cnblogs.com/hongten
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有