我正在编写一个程序,它接受一个名为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(),我也无法这样做。
谢谢!
答案 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