java中的Integer的toBinaryString()方法實例
在一次面試的過程中,遇到過這樣的題目,題目的大概意思是:讓寫出Integer類中的toBinaryString()方法
也就是說,把Integer轉(zhuǎn)換為Binary的過程寫出來
但是我蒙的,在查了JDK的源碼,發(fā)現(xiàn)了這個很好用的方法,在此給大伙看看
下面是我做的一個測試:
/**
*
*/
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&*(其中*代表其他數(shù)字,如:0,1,2,3,4...)操作的時候
* 他們是進(jìn)行二進(jìn)制之間的&(與)運算操作。只有當(dāng)*為奇數(shù)(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,所以當(dāng)i為奇數(shù)的時候,這里"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數(shù)組,因為我們只會用到數(shù)組:digits[0],digits[1]
所以:
final static char[] digits = {
'0' , '1'
};
方法里面用到了移位操作和&操作,這兩個操作是關(guān)鍵。
相關(guān)文章
SpringBoot使用token簡單鑒權(quán)的具體實現(xiàn)方法
這篇文章主要介紹了SpringBoot使用token簡單鑒權(quán)的具體實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11關(guān)于Linux服務(wù)器配置java環(huán)境遇到的問題小結(jié)
這篇文章主要介紹了關(guān)于Linux服務(wù)器配置java環(huán)境遇到的問題小結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Springboot2 集成 druid 加密數(shù)據(jù)庫密碼的配置方法
這篇文章給大家介紹Springboot2 集成 druid 加密數(shù)據(jù)庫密碼的配置方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-07-07Java創(chuàng)建多線程異步執(zhí)行實現(xiàn)代碼解析
這篇文章主要介紹了Java創(chuàng)建多線程異步執(zhí)行實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07Spring @ExceptionHandler注解統(tǒng)一異常處理和獲取方法名
這篇文章主要介紹了Spring注解之@ExceptionHandler 統(tǒng)一異常處理和獲取方法名,在實際項目中,合理使用@ExceptionHandler能夠提高代碼的可維護性和用戶體驗,通過本文的解析和實踐,讀者可以更好地理解和掌握@ExceptionHandler的用法和原理2023-09-09