您的位置:首页 > 编程语言 > Java开发

十进制数转二进制形式并判断它是否为2的n次幂(Java实现)

2015-04-26 22:33 489 查看
java提供了十进制转化为二进制、十六进制、八进制的函数;在java.lang.Integer这个API包中,转换函数如下

public   static   String   toBinaryString(int   i)   
  public   static   String   toHexString(int   i)   
  public   static   String   toOctalString(int   i)

这3个函数都可以将十进制的整数转换成二、一六、八进制数,不过转换后的结果都是字符串的形式。 在这里介绍下转换为二进制的情况。

查看Integer这个类的源码发现,java.lang.Integer这个类中,有一个方法叫public static String toBinaryString(int paramInt) ;它可以轻松实现十进制转为二进制形式。详细代码片段如下:

public static String toBinaryString(int paramInt) {
		return toUnsignedString(paramInt, 1);
	}
其中的toUnsignedString方法如下:

private static String toUnsignedString(int paramInt1, int paramInt2) {
		char[] arrayOfChar = new char[32];
		int i = 32;
		int j = 1 << paramInt2;
		int k = j - 1;
		do {
			arrayOfChar[(--i)] = digits[(paramInt1 & k)];
			paramInt1 >>>= paramInt2;
		} while (paramInt1 != 0);
		return new String(arrayOfChar, i, 32 - i);
	}
其中digits为一个static静态数据块,java.lang.Integer类在前面定义了一个final型的digits变量

static final char[] digits;
它的初始化为下列值:

static {
		digits = new char[] { '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' };
	}


如果想要将一个十进制数转换成二进制数,测试代码如下:

public static void main(String[] args) {
		Integer i = 8;
		String str = i.toBinaryString(i);
		System.out.println(str);
		
	}
输出结果为:1000

如果想要进一步判断一个十进制数是不是2的n次幂,分析它的二进制可以看出,一个数是2的n次幂,它的二进制数的除第一个为1外,其余全为零。

测试代码:

public static void main(String[] args) {
	Integer i = 16;
	String str = i.toBinaryString(i);
	System.out.println(is2N(str));
	
}
public static boolean is2N(String num){
	boolean flag = false;
	int size = num.length();
	int i =0;
	while(i<size){
		if((i==0&&num.charAt(i)=='1')||(i>0&&num.charAt(i)=='0')){
			flag = true;
		}else{
			flag = false;
			break;
		}
		i++;
	}
	return flag;
}


结果:false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐