无算术运算的十进制数转换

时间:2018-08-30 18:18:10

标签: java

我正在做作业,需要一些帮助。我需要将十进制整数转换为没有内置Java函数和任何算术运算符的二进制整数。我正在使用按位操作来读取最右边的位,然后向右移动。我遇到的问题是我的输出是向后的,我无法弄清楚如何翻转它。例如,如果我使用66,则我期望输出为1000010。但是,我的程序的输出为0100001。
谢谢您的帮助!

import java.util.Scanner;

public class Project2Exercise3 {

   public static void main(String[] args) {
      Scanner input = new Scanner(System.in);
      System.out.println("Enter a posotive integer between 1 and 2^32-1");
      String stringNumber = input.nextLine();
      long decimalNumber = Integer.parseUnsignedInt(stringNumber);

     while(decimalNumber > 0) {
       long binaryNumber = (decimalNumber & 1);
       System.out.print(binaryNumber);
       decimalNumber = (decimalNumber >> 1);
     } 
   }
} 

2 个答案:

答案 0 :(得分:1)

使用(decimalNumber & 1),您将获得最正确的信息,因此您将从正确的位置进行打印,因此会出现问题

您可以收集您的位并将其反转以在最后打印出来。

  Scanner input = new Scanner(System.in);
  StringBuffer nums = new StringBuffer();
  System.out.println("Enter a posotive integer between 1 and 2^32-1");
  String stringNumber = input.nextLine();
  long decimalNumber = Integer.parseUnsignedInt(stringNumber);
  while(decimalNumber > 0) {
    // store the bits
    nums.append(String.valueOf(decimalNumber & 1));
    decimalNumber = (decimalNumber >> 1);
  } 
  // reverse and convert it into string
  System.out.print(nums.reverse().toString());

Demo

答案 1 :(得分:0)

您可以使用递归功能来打印您的号码:

void printBinary(long n) {
    if (n > 0) {
        printBinary(n >> 1);
    }
    System.out.print(n & 1);
}

因为打印是在递归展开时进行的,所以它将自动按要求的顺序打印数字。

所写代码的唯一警告是,它将始终打印前导零。