Как перевести двоичное число в десятичное java
Перейти к содержимому

Как перевести двоичное число в десятичное java

  • автор:

sadedv / IntegerToBinary.java

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

public class Main
public static void main ( String [] args )
Integer number = 255 ;
// Бинарный формат числа
String convert = Integer . toBinaryString ( number );
System . out . println ( convert );
// Восьмиричная форма
convert = Integer . toOctalString ( number );
System . out . println ( convert );
// Шеснадцатиричная форма
convert = Integer . toHexString ( number ). toUpperCase ();
System . out . println ( convert );
>
>

Преобразование двоичной строки в десятичную в Java

В этом посте будет обсуждаться, как преобразовать двоичную строку в десятичную в Java.

1. Использование Integer.parseInt() метод

Чтобы преобразовать строку с основанием 2 в целое число с основанием 10, вы можете использовать перегруженную версию метода Integer#parseInt() метод, который позволяет указать систему счисления. Ниже приведен простой пример, демонстрирующий его использование для анализа строки как целого числа со знаком в указанной системе счисления.

Как перевести двоичное число в десятичное java

символы майя

Для усвоения этого урока достаточно знать циклы for (while, do-while), оператор выбора switch, условный оператор **if **, знание и уверенное пользование арифметическим оператором modulo.

Это один из лучших примеров, который показывает, что первоначально абсолютно неподъёмная задача при решении оказывается не такой уж и страшной.

Мы уже рассматривали во главе, которая знакомила нас с while как из десятичных чисел получить двоичные.

Повторение, 78 превращаем в 1001110.

78 : 2 = 39 остаток: 0 39 : 2 = 19 остаток: 1 19 : 2 = 9 остаток: 1 9 : 2 = 4 остаток: 1 4 : 2 = 2 остаток: 0 2 : 2 = 1 остаток: 0 1 : 2 = 0 остаток: 1 

Давайте переведём двоичное число в десятичное. Давайте возьмём уже известное нам число 1001110. В одном байте восемь битов. Число 1001110 состоит из семи цифр. В таких случая часто дописывают недостающие ноли и 100_1110 превращается в 0100_1110. Это удобно и очень важно при визуализации чисел.

Порядковый номер цифры в числе 7 6 5 4 3 2 1 0
Степени двойки 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
Чему в итоге равны степени 128 64 32 16 8 4 2 1
Пример двоичного числа 0 1 0 0 1 1 1 0
Как считается десятичное 0*128 1*64 0*32 0*16 1*8 1*4 1*2 0*1
Результат вычислений 0 64 0 0 8 4 2 0

Сумма чисел из последней строчки 64+8+4+2 = 78

Если с приведёнными примерами всё понятно, то можно перейти дальше и записать оба примера в Java.

Переведём число из десятичной системы в двоичную, пока не забыли.

public static String convertDecimalToBinary(int decimal) < int remainder; String output = ""; while (decimal >0) < remainder = (decimal % 2); output = Integer.toString(remainder) + output; decimal = decimal / 2; >return output; > 

И обратно из двоичной в десятичную

public static int convertBinaryToDecimal(int binaryDigit) < int decimal = 0; int n = 0; int temp = 0; while (binaryDigit >0) < temp = binaryDigit % 10; decimal += temp * Math.pow(2, n); binaryDigit = binaryDigit / 10; n++; >return decimal; > 

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

Если поработать над читаемостью метода convertDecimalToBinary, то мы заметим, что у нас (как минимум) дважды используется magicNumber 2 . Если мы догадаемся назвать это число systemIndex, то это будет частью решения метода convertDecimalToAnything.

public static String convertDecimalToAnything(int decimalDigit, int systemIndex) < int remainder; String output = ""; while (decimalDigit >0) < remainder = (decimalDigit % systemIndex); output = Integer.toString(remainder) + output; decimalDigit = decimalDigit / systemIndex; >return output; > 

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

У нас только одна проблема, наша система работает с числами систем меньше десятичной. Для того, что бы нам одолеть системы свыше десятичной, нам надо понять, что происходит с числом, когда его делят на 11, 12, 13, 14, 15, 16 и так далее. И здесь нам должен помочь switch, который будет перехватывать результаты деления свыше 10 и подставлять в output вместо числовых значений буквенные A, B, C, D, E, F и так далее.

Рекомендую в рамках Java ограничиться целыми позитивными числами до шестнадцатеричной системы. Она нам важна, так как в ней информатике хранят цветовую гамму.

Дополнительные ссылки #

  1. Бинарные(двоичные) числа в Java — официальная документация.
  2. Троичный компьютер
  3. Шестнадцатеричная система
  4. Двадцатиричная система
  5. Шести десятеричная
  6. Двенадцатеричная система счисления
  7. Цифры майя
  8. Пример применения — https://smallseotools.com/de/rgb-to-hex/

Домашнее задание #

  1. Ознакомиться со всеми дополнительными ссылками.
  2. Написать метод, который “вычитывает из строковых литералов десятичные и двоичные числа. Используйте метод — » Integer.parseInt();
  3. Написать свой собственный класс ConvertDigits
    • добавить интерактивность, общение программы с пользователем.
    • не использовать цикл while.

Задачи с очень повышенным уровнем сложности. #

  1. Написать метод, который решает вопрос с делением на числа из систем свыше десятичной — 11-16.
  2. (Факультатив)Написать метод перевода числа из “любой” системы в десятичную. // Мы вернёмся к этому методу в будущем.

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

Добрый день,
Необходимо ввести с консоли число в бинарном формате. Перевести его в десятичный формат, записать в переменную int и вывести на экран. Необходимо использовать циклы, нельзя использования готовые методы языка Java, для перевода числа из одной системы счисления в другую.

На текущий момент имею код , но использовать math.pow запретили, подскажите как заменить и реализовать

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Itog_1  else { System.out.println("Неверный ввод!"); break; } sum += (a * Math.pow(2, i)); } System.out.println(""" + str + "" -> " + sum); }}

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

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

Перевод целых неотрицательных чисел из двоичной системы счисления в десятичную систему счисления
Перевод целых неотрицательных чисел из двоичной системы счисления в десятичную систему счисления.

Перевод из двоичной системы счисления в десятичную
Я создал программу, но вот она выдает размерность введенного массива, вместо десятичного числа.

Перевод из двоичной системы счисления в десятичную
помогите пожалуйста)

345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
степень двойки заменяется сдвигом:
1 << i 233 / 130 / 27 Регистрация: 24.08.2016 Сообщений: 874 А я бы вот так сделала:

1 2 3 4 5 6
String str = "101101111010101110"; int n = 0; for (int i = str.length() - 1, j = 1; i >= 0; i--, j *= 2) { n += (str.charAt(i) - '0') * j; } System.out.println("\"" + str + "\" -> " + n);

Добавлено через 5 минут
Ну, еще конечно сначала бы убрала любые символы отличные от 0 и 1

Регистрация: 11.07.2019
Сообщений: 2
Спасибо за помощь.
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 874

Решила проверить какой код выполняется быстрее. Со сдвигом, или как у меня. Думалось, что сдвиг будет все-таки эффективнее. Но оказалось, что нет. Со сдвигом выполняется почти в два раза медленнее.

И еще выяснила такую интересную особенность: «в Java есть понятие warming, то есть разогрев. Любой метод начинает исполнятся в интерпритируемом режиме, медленно. И только через некоторое время, когда JIT поймет что участок кода используется интенсивно, он будет закомпилирован.»
Следовательно, нельзя испытывать два сравниваемых кода вместе. Первое испытание длится почти на порядок дольше, чем остальные (См. результат)
Поэтому я реализовала так, каждый код испытывается отдельно от другого десять раз, и берется среднее время выполнения для каждого кода. А уже потом результаты сравниваются.

Кликните здесь для просмотра всего текста

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
public class SpeedTest { public static void main(String[] args) { SpeedTest st = new SpeedTest(); long start, delta, sum = 0, n = 10; for (int i = 0; i  n; i++) { start = System.nanoTime(); st.code(); delta = System.nanoTime() - start; sum += delta; System.out.println("Испытание #" + (i + 1) + ": " + delta); } System.out.println("Среднее время выполнения: " + sum / n); } private void code() { String str = "101101111010101110"; int n = 0; for (int i = str.length() - 1, j = 1; i >= 0; i--, j *= 2) n += (str.charAt(i) - '0') * j; } // private void code() // String str = "101101111010101110"; // int n = 0; // for (int i = 0; i < str.length(); i++) // n += (str.charAt(i) - '0') * (1 // > }
1 2 3 4 5 6 7 8 9 10 11
Испытание #1: 23579 Испытание #2: 3369 Испытание #3: 2887 Испытание #4: 2406 Испытание #5: 2887 Испытание #6: 2888 Испытание #7: 2406 Испытание #8: 2887 Испытание #9: 3369 Испытание #10: 3368 Среднее время выполнения: 5004

Добавлено через 1 час 1 минуту
И что еще интересно. Чем больше испытаний проводить за одно выполнение программы, тем существеннее снижается время выполнения кода в каждой итерации. Я установила 1000 испытаний и получила такие результаты по отдельным испытаниям:
Испытание #1: 13955 нс.
Испытание #100: 2888 нс.
Испытание #1000: 962 нс.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *