为什么我的十进制到二进制程序最后添加额外的数字?

时间:2012-09-21 06:57:47

标签: java binary decimal

我正在编写一个程序,它接受一个名为decimalInput的整数(当前是用于测试目的的文字)并将其转换为名为binaryOutput的String,它是二进制形式的十进制数。我正在使用this guide (the first one)来解释如何完成从十进制到二进制的转换。到目前为止,这是我的代码:

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(),我也无法这样做。

谢谢!

2 个答案:

答案 0 :(得分:4)

我会使用toBinaryString来检查你的结果

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

打印

100101001111110

你的程序一样正确!

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

答案 1 :(得分: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