java 取整数的二进制表示形式

jaxagkaj  于 2023-02-07  发布在  Java
关注(0)|答案(4)|浏览(131)

我试着创建一个代码,在Java中接收整数并输出为二进制。问题似乎是二进制向后打印。例如,6应该输出为011,但输出为110

import java.util.Scanner;

public class LabProgram {
  public static void main(String[] args) {

    int userNum;

    Scanner in =new Scanner(System. in );

    userNum = in.nextInt();

    binary(userNum);
    System.out.print("\n");
  }

  private static void binary(int userNum) {
    int remainder;

    while (userNum <= 1) {
      System.out.print(userNum);
      return;
    }

    remainder = userNum % 2;
    binary(userNum >> 1);
    System.out.print(remainder);
  }
}

我尝试合并一个推送堆栈,将剩余部分推送到一个可以稍后拉取的堆栈中,但无法使其完全到达。

private static void reverse(int userNum) {

  String backwards;

  while (userNum >= 0) {
    backwards.push(int userNum);
    System.out.println(backwards);
    return;
  }
}

这是课堂作业的一部分,课堂作业要求完成以下内容。
编写一个程序,输入一个正整数,输出一个由1和0组成的字符串,用二进制表示该整数。对于整数x,算法为:

As long as x is greater than 0
   Output x % 2 (remainder is either 0 or 1)
   x = x / 2

注:上述算法以相反顺序输出0和1。
例如:如果输入为:
6
输出为:
011
二进制的6110;该算法反向输出比特。
这是程序的测试结果和我的测试结果。
输入6
您的输出binary is:110
预期输出011
输入19
您的输出10011
预期输出11001
输入255
您的输出11111111
预期输出11111111
在这方面的任何帮助或指导,我将不胜感激。

cczfrluj

cczfrluj1#

根据要求,不考虑负数

import java.util.Scanner;

public class LabProgram {
    public static void main(String[] args) {
        int userNum;

        Scanner scnr = new Scanner(System.in);

        userNum = scnr.nextInt();

        while(userNum > 0){
            System.out.print(userNum % 2);
            userNum = userNum / 2;
        }
        System.out.print("\n");
    }
}
pqwbnv8z

pqwbnv8z2#

首先使用预定义的方法,然后自定义一个。

public class IntToBinary {

    public static void main(String[] args) {
        int decimalNumber = 10;

        System.out.println(Integer.toBinaryString(decimalNumber));

        System.out.println(convertBinary(10));
    }

    public static String convertBinary(int num) {
        StringBuilder sb = new StringBuilder();
        int binary[] = new int[40];
        int index = 0;
        while (num > 0) {
            binary[index++] = num % 2;
            num = num / 2;
        }
        for (int i = index - 1; i >= 0; i--) {
            sb.append(binary[i]);
        }
        return sb.toString();
    }

}
vsdwdz23

vsdwdz233#

你的程序看起来可以很好地处理正值。但是它不能处理负数,因为负数有自己独特的二进制表示形式two's complement。你可以做一些类似下面的事情来适应:

private static void binary(int userNum) {
    int remainder;

   //  while (userNum <= 1) {
   //     System.out.print(userNum);
   //     return;
   // }
   if (userNum == 0) {
          return;
    }

    // simply mask off the bit instead of dividing by two
    remainder = userNum & 1;
    // and shift right thru the sign bit
    binary(userNum >>> 1);
    System.out.print(remainder);    
}
}

binary(-6));

印刷品

11111111111111111111111111111010

这些值按正确的顺序打印出来的原因是因为你的例程是递归的,这是一个自然的行为,从一个递归过程中打印存储在堆栈中的值。

t9aqgxwy

t9aqgxwy4#

导入java.util.scanner;
公共类反向二进制数{

public static void main(String[] args) {
      /* Type your code here. */
      
Scanner scnr = new Scanner(System.in);
            
      int inputNum;
      
      System.out.println("Enter the Digit : ");
      inputNum = scnr.nextInt();
      
      System.out.println("The Reverse Binary for the given Digit is : ");
      while(inputNum > 0)
      {
          System.out.print(inputNum % 2);
          inputNum = inputNum / 2;         
         
      }
   scnr.close();
   }
}

相关问题