Цифра «0», которая появляется после 1, наконец теряется в двоичном числе при преобразовании из десятичного числа - PullRequest
0 голосов
/ 12 октября 2018

Я новичок в Java и учусь преобразовывать систему счисления из одной в другую.При преобразовании я обнаружил, что цифра '0' (ноль), которая появляется после 1, наконец, не присваивается двоичному числу.

Когда я преобразовываю 63 десятичных знака в двоичный, результат равен 111111;что верно, и здесь не возникло никаких проблем, потому что результирующее двоичное значение не содержит нулей.

Когда десятичная цифра равна 42, результатом является 10101, который должен был быть 101010, то есть «0», которое приходитпосле того, как 1, наконец, не был назначен.

И когда я преобразовал десятичную цифру 64 в двоичную, результат, который должен был выглядеть как 1000000, стал равным 1, то есть все '0' (нули) после 1 получаетпотерян.

Означает ли этот код нули, которые появляются после 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 голосов
/ 12 октября 2018

Проблема в том, что вы добавляете 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));
}
0 голосов
/ 12 октября 2018

Проблема в том, что вы конвертируете в обратном направлении, и целое число 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);
0 голосов
/ 12 октября 2018

Спасибо Марк за предложение использовать "StringBuilder".

Проблема в том, что когда вы добавляете любое число к 0, число остается неизменным.10 останется 10, независимо от того, сколько раз вы добавите к нему 0.

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);
...