从十进制数字转换时,最后出现在1之后的数字“ 0”在二进制数字中丢失了

时间:2018-10-12 12:06:59

标签: java binary decimal

我是Java的初学者,正在学习将数字系统从一种转换为另一种。转换时,我发现最后出现在1之后的数字“ 0”(零)没有分配给二进制数。

当我将63个十进制数字转换为二进制时,结果为111111;没错,这里没有问题,因为结果二进制值不包含任何零。

当十进制数字为42时,结果为10101,应该是101010,即最后一个在1之后的'0'未被分配。

当我将十进制数字64转换为二进制时,本应显示为1000000的结果变为1,即丢失1之后的所有“ 0”(零)。

此代码是否表示最后出现在1之后的零是无关紧要的?还是有其他问题?

class DecToBin{
    public static void main(String[] args){
    int dec = 64;
    int bin=0,rem=0;
    while(dec!=0){
        rem=dec%2;
        bin=bin*10+rem;
        dec=dec/2;
    }
    System.out.println("In Binary = "+bin);
  }
}

3 个答案:

答案 0 :(得分:1)

麻烦是您要添加0而不是真正建立正确的数字,因此可以使用String来存储数字,最好使用StringBuilder并执行以下操作:

public static void main(String[] args) {
    int dec = 64;
    StringBuilder sb = new StringBuilder();
    int  rem = 0;
    while (dec != 0) {
        rem = dec % 2;
        sb.insert(0,rem);
        dec = dec / 2;
    }
    System.out.println("In Binary = " + sb.toString());
}

但是您可以使用Integer.toString(int i, int radix)。您尝试做的事情已经在Java中存在:

public static void main(String[] args) {
    int dec = 64;
    System.out.println("In Binary = " + Integer.toString(dec,2));
}

答案 1 :(得分:1)

问题是您要向后转换,整数010101与10101相同。尝试使用32 + 3之类的东西,应该是100011,但得到110001。

此外,字符串连接方法的性能极低,并且占用大量内存。使用StringBuilder可以解决这个问题。

int dec = 35;
// 32 = Most digits you'll ever need with an int.
StringBuilder binBuilder = new StringBuilder(32);
while (dec > 0) {
    int bit = dec & 1; // Using this instead of 'remainder' has higher performance.
    binBuilder.insert(0, bit != 0 ? '1' : '0');
    dec >>>= 1; // Using this instead of 'divide' keeps the 32nd bit.
}
String bin = binBuilder.toString();
System.out.println("In Binary = " + bin);

答案 2 :(得分:0)

感谢Mark建议使用“ StringBuilder”。

问题是,当您将任何数字添加到0时,数字保持不变。 不管您添加0多少次,10都会保持为10。

StringBuilder s=new StringBuilder("");
while(dec!=0)
{
    rem=dec%2;
    s.append(rem);
    dec=dec/2;
}
System.out.println("In Binary = "+s.reverse());

我提供的解决方案的工作原理是,它以一个空字符串开头,然后继续在该字符串的左侧添加一个数字。

Integer.toString() //converts an integer to a string 
concat is used to add to strings.

如果在程序中需要使用该二进制数,则可以使用

int binary_number=Integer.parseInt(s);