繁体   English   中英

Java中的十进制到二进制转换器

[英]Decimal to Binary Converter in Java

我需要在Java中将小数转换为二进制。 我不能使用Integer.toBinaryString(),而我所看到的每个答案都使用它。 我实际上需要制定算法。 我想让输入保持int值,而让输出保持String值,因为如果我更改程序的其余部分,就会搞砸了。 如果可以的话,请使其保持基本状态。 经过数小时的草拟和剪贴,我最终得到的结果是它有很多问题,例如甚至没有将二进制数放在一起。 拜托,请帮忙,我很困惑,我的脑子一团糟。

public static String decToBin(int dec)
  {
    String bin = "";
    int exp = 0;

    for(int expLevel = 0; Math.pow(2, expLevel) <= dec; expLevel++)
    {
      if(dec - Math.pow(2, expLevel) >= 0)
      {
        dec -= Math.pow(2, expLevel-1);
      }
    }
    return bin;
  }

看来您需要复习数学笔记。 这是基本算法的一个很好的解释: 如何从Decimal转换为Binary

如果检查提供的链接,您将看到只需要将数字除以2的余数即可。作为一个简短的算法:

int n <- user input (or other source)
String binaryForm <- empty string
while (n > 0) {
    int res <- n % 2;
    n <- n / 2;
    binaryForm <- res + binaryForm
}

两件很明显的事情:

  • 声明后,您不会在任何位置更改bin (并且也不使用exp )。
  • if(dec - Math.pow(2, expLevel) >= 0)中的条件等效于循环不变式,因此始终为true。

可以使这种方法起作用,但是循环必须走另一条路,即从较高的2的幂到较低的幂(这意味着您必须首先找到比输入小2的最大幂,除非您是可以加上前导零)。 同样,这可能有助于避免重新分配方法参数( dec )。

您可以将参数移动1位,并将其添加到字符串中。 最后,您可以将其反转,如下所示:

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(decToBin(0));
        System.out.println(decToBin(1));
        System.out.println(decToBin(2));
        System.out.println(decToBin(127));
    }

    public static String decToBin(int dec) {
        if (dec == 0) {
            return "0"; // special case
        }

        final StringBuilder result = new StringBuilder();
        int current = dec;

        while (current != 0) {
            result.append(current & 0x1);
            current = current >> 1;
        }

        return result.reverse().toString();
    }
}

和一个小提琴 它适用于正整数。

import java.util.Scanner;

public class DecimalToBinary {

public String toBinary(int n) {
   if (n == 0) {
       return "0";
   }
   String binary = "";
   while (n > 0) {
       int rem = n % 2;
       binary = rem + binary;
       n = n / 2;
   }
   return binary;
}

public static void main(String[] args) {
   Scanner scanner = new Scanner(System.in);
   System.out.print("Enter a number: ");
   int decimal = scanner.nextInt();
   DecimalToBinary decimalToBinary = new DecimalToBinary();
   String binary = decimalToBinary.toBinary(decimal);
   System.out.println("The binary representation is " + binary);

}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM