1

我正在编写一个程序,它采用一个名为 decimalInput 的整数(目前是一个用于测试目的的文字)并将其转换为一个名为 binaryOutput 的字符串,它是二进制形式的十进制数。我正在使用本指南(第一个)来解释如何完成从十进制到二进制的转换。到目前为止,这是我的代码:

public class ToBin {
public static void main(String[] args) {
    int decimalInput = 19070;
    String binaryOutput = "";
    while (decimalInput > 0) {
        if (decimalInput % 2 == 0) {
            binaryOutput = "0" + binaryOutput;
            decimalInput = decimalInput / 2;
        }
        else {
            binaryOutput = "1" + binaryOutput;
            decimalInput = decimalInput / 2;
        }
    }
    System.out.println(binaryOutput);
    }
}

对于我拥有的当前文字(19070),我的程序返回字符串“100101001111110”。然而,这是不正确的。我的程序应该返回“10010100111”。因此,出于某种原因,我的程序在末尾添加了一个额外的字符串“1110”。起初我想,好吧,也许我在某个地方搞砸了数学。所以我试着检查数学,它看起来没问题。然后我尝试将文字 decimalInput 更改为较小的数字,特别是 156,它返回字符串“10011100”,这是正确的输出。

我尝试将 decimalInput 更改为键入 long 以查看是否有帮助,但没有。

我所知道的是,由于某种原因,更大的数字正在使我的程序崩溃。我不知道为什么。

我将不胜感激任何帮助,因为这真的让我很沮丧。这也适用于一个类,所以尽管我想使用 toBinaryString(),但我无法这样做。

谢谢!

4

2 回答 2

4

我会用 toBinaryString 来检查你的结果

int decimalInput = 19070;
System.out.println(Integer.toBinaryString(decimalInput));

印刷

100101001111110

你的程序也是如此,所以它是正确的!

注意:您的程序根本不会显示负数。

于 2012-09-21T07:02:09.353 回答
1

回答第二个问题

“你能想出如何修复你的程序,让它处理负数吗?”

正如我在其他评论中所建议的那样,我将使用位移运算符。

if 语句会变成这样:

if (decimalInput & 0x01 == 0) { // If the least significant bit is set

而“师”会变成这样:

decimalInput = decimalInput >>> 1; // Shifting all bits one to the right

这可以帮助您了解正在发生的事情:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

于 2012-09-21T08:18:56.437 回答