时间:2021-05-19
在一次面试的过程中,遇到过这样的题目,题目的大概意思是:让写出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));
}
}
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'
};
方法里面用到了移位操作和&操作,这两个操作是关键。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
复制代码代码如下://二转十Integer.toBinaryString(inti);//八转十Integer.toOctalString(inti);//十六
java进制转换实例详解十进制转成十六进制:Integer.toHexString(inti)十进制转成八进制Integer.toOctalString(int
本文实例讲述了java数学归纳法非递归求斐波那契数列的方法。分享给大家供大家参考。具体如下:Integer能表示的最大值为2147483647大概是21.4亿,
在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf
Java也有Integer.parseInt()方法,但是JavaScript的parseInt处理方式与Java等强整型语言不太一样,所以经常有人因为对这个方