java中的Integer的toBinaryString()方法執行個體_java

來源:互聯網
上載者:User

在一次面試的過程中,遇到過這樣的題目,題目的大概意思是:讓寫出Integer類中的toBinaryString()方法

也就是說,把Integer轉換為Binary的過程寫出來

但是我蒙的,在查了JDK的源碼,發現了這個很好用的方法,在此給大夥看看

下面是我做的一個測試:

複製代碼 代碼如下:

/**
 *
 */
package com.b510.test;

/**
 * @author Hongten
 * @date 2013-12-15
 */
public class TestF {

    public static void main(String[] args) {
        //output:1000
        System.out.println(toBinaryString(8));
        //printInfo();
    }

    /**
     * 這裡是做&操作的測試,也就是說,在1&*(其中*代表其他數字,如:0,1,2,3,4...)操作的時候
     * 他們是進行二進位之間的&(與)運算操作。只有當*為奇數(1,3,5,7...)的時候,1*&操作才可以返回:1
     * 其他情況返回:0
     */
    private static void printInfo(){
        for(int i =0; i< 10; i++){
            System.out.println("i= " + i + "         "+(i & 1));
        }
        /*
        output:
        i= 0         0
        i= 1         1
        i= 2         0
        i= 3         1
        i= 4         0
        i= 5         1
        i= 6         0
        i= 7         1
        i= 8         0
        i= 9         1
        */
    }

    public static String toBinaryString(int i) {
        return toUnsignedString(i, 1);
    }

    /**
     * Convert the integer to an unsigned number.
     */
    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 {
            //這裡的mask一直為:1,所以當i為奇數的時候,這裡"i & mask"操作才為:1
            //否則返回:0
            //System.out.println(i & mask);
            buf[--charPos] = digits[i & mask];
            i >>>= shift;//右移賦值,左邊空出的位以0填充
        //System.out.println(buf);
        //System.out.println(charPos);
        //System.out.println(i);
        } while (i != 0);
        return new String(buf, charPos, (32 - charPos));
    }

    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'
        };
}

在代碼中,其實我們可以簡化一下digits數組,因為我們只會用到數組:digits[0],digits[1]

所以:

複製代碼 代碼如下:

final static char[] digits = {
        '0' , '1'
        };

方法裡面用到了移位操作和&操作,這兩個操作是關鍵。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.