java中的Integer的toBinaryString()方法


在一次面試的過程中,遇到過這樣的題目,題目的大概意思是:讓寫出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

========================================================


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM