Преобразование десятичного int в двоичный

#java

#java

Вопрос:

Моя задача — написать метод, который преобразует любое десятичное число в двоичное, число задается как int, а преобразованное (двоичное) число также должно быть возвращено как int. Теперь у меня есть что-то вроде решения, но я не знаю, как сохранить преобразованное число как int, поскольку я работаю со строкой в своем методе! Я чувствую .parseInt() , что это было бы слишком просто, потому что тогда я мог бы просто использовать . toBinaryString()

 static void intToBin (int a) {

String bin = "";

while (a > 0) {
    if ( a % 2 == 0 )
        bin = bin   "0";
    else
        bin = bin   "1";
    a /= 2;
}

for (int i = 0; i < bin.length();i   ) {
    System.out.print(bin.charAt(i));
}
 

Комментарии:

1. Каким вы ожидаете получить значение, когда вы преобразуете, скажем, десятичное число 43 в int и печатаете его.

2. Я не уверен, что понимаю; это уже int . «Преобразование» его в двоичное, а затем преобразование его обратно в an int снова кажется … странным.

Ответ №1:

Во-первых, двоичное представление — это просто значение десятичного числа в двоичной строке. Или десятичное — это просто представление двоичного числа. Если вы преобразуете двоичное число в int, это будет десятичное число (независимо от того, имеет ли оно только 1 и 0 или нет).

 int a = 1001;  //is a decimal number  == 1,001
int b = 0b1001; //is a decimal number == 9
 

Приведенное выше будет напечатано в десятичном виде, потому что это выходное представление методов печати по умолчанию. Внутренне все числа равны 1 и 0 (или, возможно, даже 5 В и 0 В в зависимости от того, насколько конкретно вы хотите быть).

Если вы хотите преобразовать двоичную строку в десятичную, сделайте это аналогично. За исключением того, что вместо деления на два и получения остатка вы умножаете на два.

 int sum =0
String s = "11011";  //27
for (char c : s.toCharArray()) {
   sum = sum * 2   (c-'0'); // multiply by 2 and add the bit.
}
System.out.println(sum);

 

С принтами

 27
 

Обратите внимание, что мне не нужно хранить его как строку, поскольку десятичное значение является представлением по умолчанию (как я объяснял ранее).

Ответ №2:

Это сделало бы то, о чем вы просите:

 public static int decimalToBinary(int a) {
    String result = "";
    while (a > 0) {
        int res = a % 2;
        a = a / 2;
        result = res   resu<
    }
    return Integer.parseInt(result);
}
 

Ответ №3:

 String text = etxtDecimal.getText().toString();
binary = Integer.toBinaryString(Integer.parseInt(text));
 

Это так. Мы используем toBinaryString для преобразования десятичного числа в двоичное

Ответ №4:

Просто примечание, вместо того, чтобы использовать цикл:

 for (int i = 0; i < bin.length();i   ) {
    System.out.print(bin.charAt(i));
}
 

цифры могут быть добавлены перед результатом:

 ...
if ( a % 2 == 0 )
    bin = "0"   bin;
else
    bin = "1"   bin;
...
System.out.println(bin);
 

(также можно просто добавить результат a % 2 , без необходимости if не уверен, что лучше)


если вы хотите сохранить двоичное представление как int (немного странно, сбивает с толку).
Пример: ввод 5 , вывод 101

 int bin = 0;
int mult = 1;
while (a > 0) {
    if (a % 2 == 1) {
        bin  = mu<
    }
    mult *= 10;
    a /= 2;
}
 

не проверено, просто идея, чтобы вдохновить