将一个十进制数转为二进制形式并判断它是否是2的n次幂

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 = 666;
		String str = i.toBinaryString(i);
		System.out.println(str);//输出这个数的二进制字符串形式
		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.substring(i).equals("1"))||(i>0&&num.substring(i).equals("0"))){
				flag = true;
			}else{
				flag = false;
				break;
			}
			i++;
		}
		return flag;
	}

结果:false

时间: 2024-10-10 06:21:11

将一个十进制数转为二进制形式并判断它是否是2的n次幂的相关文章

递归 将一个十进制数转化为任意进制字符串

Create All kinds of guns. 设计重点: 1 基类作接口 2 继承类是各种不同的类 3 构建工厂类,然后根据需要创造不同的类,可以传入关键字,或者索引等. #pragma once #include <string> #include <iostream> using namespace std; //Base class class Gun { public: virtual string description() { return "Gener

判断给定十进制整数的二进制形式中含有几个1

两种判断一个给定整数的二进制形式中含有几个1的简单方法: 主要思想是通过按位与(&)运算和位移运算(<< >>)实现 1 unsigned int_number( int n) 2 { 3 if (n < 0) 4 return; 5 unsigned count = 0; 6 while (n != 0) 7 { 8 if ((n & 1) != 0) 9 ++count; 10 n >>= 1; 11 } 12 return count; 13

Java十进制数转二进制的方法

使用Integer.toBinaryString(num) ,可以把十进制数转换成二进制 //十进制转换成二进制 Integer.toBinaryString(num); binary 二进制 System.out.println(Integer.toBinaryString(3)); 原文地址:https://www.cnblogs.com/luguankun/p/10419679.html

将一个无符号十进制数的二进制逆转,然后以输出

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(){ int m = 0, n = 0, x = 0, y = 0; int i = 0, count = 0; printf("请输入m和n:\n"); scanf("%d%d", &m, &n); for (i = 0; i < 32; i++) {  x = (m >> i) & 1;  y =

利用倒除法将一个十进制数的正整数转换为二进制

#include <iostream> #include <Windows.h> using namespace std; int main(void) { int n = 0; int ret[32]; int i = 0; cout << "请输入一个正整数:"; cin >> n; while (n != 0) { ret[i] = n % 2; n = n / 2; i++; } for (i--; i >= 0; i--)

Ex 2_25 n位十进制整数转换为二进制形式..._第四次作业

(a)   当n=1时,(10)d=(1010)b 当n=2时,(100)d=(10)d x (10)d=(1010)b x (1010)b 当n=4时,(10000)d=(100)d x (100)d=(1010)b x (1010)b x (1010)b x (1010)b - 因此z=pwr2bin(n/2) T(n)=T(n/2)+(cn/2)log23=>T(n)=O(nlog23) (b) 若十进制整数x的位数等于1,则返回binary[x] 假设位数为n(n>1且n为2的幂),则

将一个十进制数转化为16进制数

1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 int ival; 7 8 char result[8] = ""; 9 char array[17] = "0123456789ABCDEF"; 10 int index = -1; 11 printf("input the value:\n"); 12 scanf_s("%d"

【模板小程序】任意长度十进制数转化为二进制(java实现)

妈妈再也不用担心十进制数过大了233 import com.google.common.base.Strings; import java.math.BigInteger; import java.util.Scanner; /** * 任意长度十进制数转化为二进制 */ public class AnyNumberConverterFromDecimalToBinary { /** * * @param srcNum 待转换的十进制数 * @return 二进制字符串 */ private s

将十进制数转换为二进制数----不用数组,也不用函数,只用循环

输入一个正整数(十进制),输出此整数对应的二进制数(用循环实现,但不用数组,也不用函数调用) /* 输入一个正整数(十进制),输出此整数对应的二进制数(用循环实现,但不用数组) 分析:十进制转换成二进制的方式: 用辗转相除依次取余,直到商为0,获取逆序的余数序列就是对应的二进制数 用循环不用数组,因此,将按先得到的余数序列组成一个整数值, 再逆序输出该整数值(从低位到高位输出),即获得二进制代码 */ #include <iostream> using namespace std; int m