Перевод числа из десятичной с\с в двоичную с\с

Рейтинг: 3Ответов: 3Опубликовано: 23.05.2011

Задачка, написать метод перевода числа из десятичной сс в двоичную сс.

public class Binary {  
    public static void binar(int a) {  
        int i, b;   
        while(a !=0 ) {  
            b = a%2;  
            System.out.print(b);  
            a = a/2;  
        }  
    }    
    public static void main(String [] args) {  
        binar(8);  
    }  
}

Вопрос: почему число на печать выводит в обратном порядке? Кто-нибудь может подсказать?

Ответы

▲ 4Принят

Потому, что попробуйте решить задачу вручную и сразу все поймете.

b = 8 % 2 = 0
b = 4 % 2 = 0
b = 2 % 2 = 0
b = 1 % 2 = 1

И вы соответственно последовательно это выводите. Как решение проблемы, пишите все в строку (StringBuilder), а затем переверните ее.

▲ 3

Вот решение без использования String`а

 public static void binar(int n) {
    int i = bitsInNumber(n);
    int bit;
    while ( --i >= 0 ){
        bit = (n & (1 << i)) == 0 ? 0 : 1;
        System.out.print(bit);
    }
}

public static int bitsInNumber(int n) {
    int res = 0;
    while (n > 0) {
        n >>= 1;
        res++;
    }
    return res;
}
▲ 2

кхэм. Может так?

int a = 290;
System.out.println(Integer.toString(a, 2));

или так

public static String toBinaryString(int i) {
    return toUnsignedString(i, 1);
}