我正在做作业,需要一些帮助。我需要将十进制整数转换为没有内置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);
}
}
}
答案 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());
答案 1 :(得分:0)
您可以使用递归功能来打印您的号码:
void printBinary(long n) {
if (n > 0) {
printBinary(n >> 1);
}
System.out.print(n & 1);
}
因为打印是在递归展开时进行的,所以它将自动按要求的顺序打印数字。
所写代码的唯一警告是,它将始终打印前导零。