Java из двоичной системы в десятичную и обратно
Раньше, чтобы переводить числа из одной системы счисления в другую я писал методы с циклами и т.п.
Нужно делать так:
int i = 232; //число 232 в двоичной системе System.out.println(Integer.toBinaryString(i)); //обратыный перевод из двоичной системы в десятичную System.out.println(Integer.parseInt("11101000", 2));
Вывод на консоль:
11101000
232
Также есть перевод в восьмиричную систему ( метод toOctalString) и шестнадцатиричную ( метод toHexString)
Share this:
Понравилось это:
Нравится Загрузка.
Похожее
7 thoughts on “Java из двоичной системы в десятичную и обратно”
Алишер said: 19 декабря, 2014 в 11:11 дп
Большое спасибо! Ответить
Константин said: 21 апреля, 2017 в 5:44 пп
Duke Nukem said: 26 августа, 2017 в 7:39 пп
можно запулить одномерный динамичексий массив строковых двоичных типа: String massive[] = new <«0000», «0001» и т.д. ток динамическим боком >значений и из него доставать так же как ты щас замутил через принт, ток массив(переменная со значением). Ответить «0000»,>

Duke Nukem said: 26 августа, 2017 в 7:40 пп
хотя чет я о своем, заработался. у тебя эффективнее с методом класса=))) Ответить
Кстати, классно что есть методы toOctalString — перевод в восьмиричную систему и toHexString (шетнадцатиричная) работа с которыми абсолютна аналогична. Ответить
Преобразовать число в двоичное в Java
В этом посте мы обсудим, как преобразовать число в двоичное в Java.
1. Использование встроенных методов
Стандартным решением для преобразования числа в двоичное в Java является использование Integer.toBinaryString() метод, который возвращает двоичное представление указанного целого числа в строковом формате.
class Main
public static void main ( String [ ] args )
String binary = Integer . toBinaryString ( n ) ;
System . out . println ( binary ) ;
результат:
1001011
Точно так же вы можете преобразовать длинное значение, используя Long.toBinaryString() метод.
class Main
public static void main ( String [ ] args )
long n = 75 ;
String binary = Long . toBinaryString ( n ) ;
System . out . println ( binary ) ;
результат:
1001011
В качестве альтернативы вы можете использовать toString(i, r) метод, который возвращает строковое представление i в основе r . Однако это не работает так, как предполагалось для отрицательных чисел.
class Main
public static void main ( String [ ] args )
String binary = Integer . toString ( n , 2 ) ;
System . out . println ( binary ) ;
результат:
1001011
Если вам нужно, чтобы двоичное представление целого числа было дополнено нулями слева, вы можете использовать любой из методов, описанных в это почта:
2. Наивное решение
Мы даже можем написать собственную процедуру для преобразования числа в двоичный формат, как показано ниже:
class Main
public static String toBinary ( int n , int length )
StringBuilder binary = new StringBuilder ( ) ;
for ( long i = ( 1L << length - 1 ) ; i >0 ; i = i / 2 ) <<>
binary . append ( ( n & i ) != 0 ? «1» : «0» ) ;
return binary . toString ( ) ;
public static void main ( String [ ] args )
int length = 32 ;
String binary = toBinary ( n , length ) ;
System . out . println ( binary ) ;
результат:
00000000000000000000000001001011
Вот рекурсивная версия приведенного выше кода:
class Main
public static String toBinary ( int n )
return toBinary ( n / 2 ) + ( n % 2 ) ;
public static void main ( String [ ] args )
int length = 32 ;
String binary = String . format ( «%0» + length + «d» , Integer . valueOf ( toBinary ( n ) ) ) ;
System . out . println ( binary ) ;
результат:
00000000000000000000000001001011
Вот и все о преобразовании числа в двоичное в Java.
Оценить этот пост
Средний рейтинг 4.64 /5. Подсчет голосов: 11
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Подписывайся
0 Комментарии
Встроенные отзывы
Просмотреть все комментарии
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации
- Все проблемы
- Практика DSA
- 100 самых популярных задач
- 50 лучших классических задач
- Лучшие алгоритмы
- Компилятор С/С++
- Компилятор Java
- Компилятор Python
- Компилятор JavaScript
- компилятор PHP
- Компилятор C#
- Свяжитесь с нами
- Политика конфиденциальности
- условия обслуживания
- Подпишитесь на новые публикации
Techie Delight © 2023 Все права защищены.
Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно
Перевод числа из десятичной с\с в двоичную с\с
А не проще сначала посчитать а потом вывести? Или задача именно в выводе? Если в выводе то можно сразу в строку забивать в нужной последовательности а потом вывести.
23 мая 2011 в 16:24
вот само задание: Write a method that receives an integer in base ten and returns out the original number represented in base 2. For example, giving 8 will return «1000».
24 мая 2011 в 5:22
6 ответов 6
Сортировка: Сброс на вариант по умолчанию
Потому, что попробуйте решить задачу вручную и сразу все поймете.
b = 8 % 2 = 0 b = 4 % 2 = 0 b = 2 % 2 = 0 b = 1 % 2 = 1
И вы соответственно последовательно это выводите. Как решение проблемы, пишите все в строку (StringBuilder), а затем переверните ее.
Отслеживать
ответ дан 23 мая 2011 в 8:27
9,953 3 3 золотых знака 33 33 серебряных знака 60 60 бронзовых знаков
Только пишите в StringBuilder, а не напрямую в строку.
23 мая 2011 в 8:34
Логично:) Поправил
23 мая 2011 в 8:40
Не подумал о таком раскладе =) благодарю за подсказку 😉
23 мая 2011 в 9:20
Вот решение без использования String`а
public static void binar(int n) < int i = bitsInNumber(n); int bit; while ( --i >= 0 ) < bit = (n & (1 > public static int bitsInNumber(int n) < int res = 0; while (n >0) < n >>= 1; res++; > return res; >
Отслеживать
ответ дан 21 янв 2016 в 1:27
Alexander Smirnov Alexander Smirnov
408 2 2 серебряных знака 8 8 бронзовых знаков
int a = 290; System.out.println(Integer.toString(a, 2));
public static String toBinaryString(int i)
Отслеживать
51.2k 86 86 золотых знаков 266 266 серебряных знаков 505 505 бронзовых знаков
ответ дан 23 мая 2011 в 13:30
Anton Feoktistov Anton Feoktistov
1,764 12 12 серебряных знаков 22 22 бронзовых знака
У автора как раз цель: «написать метод перевода числа из десятичной сс в двоичную сс». Конечно, при реальной разработке стоит воспользоваться готовым решением.
23 мая 2011 в 13:48
public static String binar(int a) < return Integer.toString(a, 2); >— условие выполнено
23 мая 2011 в 20:17
Решение таки было найдено =)
public class Binary < public static void binar(int a)< int b; String temp = ""; while(a !=0)< b = a%2; temp = b + temp; a = a/2; >System.out.print(temp); > public static void main(String [] args) < binar(5); >>
Отслеживать
ответ дан 24 мая 2011 в 6:45
Kobayashi_Maru Kobayashi_Maru
959 1 1 золотой знак 10 10 серебряных знаков 18 18 бронзовых знаков
если вашей задачей было вывести бинарное представление строки в целях «сдать лабу» то да. во всех других случаях советую обратить внимание на ответ @Антон-Феоктистов
24 мая 2011 в 20:03
Задача преведена комментарием выше 😉 В данном случае целью стояло применить полученные знания на практике, к тому же, вопрос был несколько иным, не подсказывать решение, а подсказать почему происходит определённое действие; за предоставленное оптимальное решение конечно спасибо! (Буду иметь ввиду его в будущем) =)
25 мая 2011 в 4:28
Еще можно как-то так
public class Example < public static String iterateBinarConv(int number) < if (number < 0) throw new IllegalArgumentException("Number < 0"); if (number == 0) return "0"; /*вычисляем длинну массива для буф.*/ int index = (int) Math.ceil( Math.log(number) / Math.log(2) ) + 1; char[] buf = new char[index]; int innerIndex = index - 1; while (number != 0) < buf[innerIndex--] = (char) ((number % 2) + 30); number/=2; >return new String(buf); > >
Отслеживать
ответ дан 15 ноя 2019 в 0:34
Олег Мищенков Олег Мищенков
package bin; import java.util.Scanner; public class Binar < public static void binar(int a)< int b; String temp = ""; while(a !=0)< b = a%2; temp = b + temp; a = a/2; >if (temp.equals("10")) < temp = "0" + temp; System.out.println(temp); >if (temp.equals("11")) < temp = "0" + temp; System.out.println(temp); >if (temp.equals("1")) < temp = "00" + temp; System.out.println(temp); >else < System.out.println(temp); >> public static void binarturn(String [] args) < Scanner kb = new Scanner (System.in); System.out.print("Введите число которое хотите перевести в (Двоичное) - "); int c = kb.nextInt(); binar(c); kb.close(); >>
А еще вот модификация на основе взятого кода, без метода main и подготовленного для импорта в другие классы. собственно весь класс является методом. Развилка if добавлена для того что бы при переводе 1,2,3 мы получали «001», «010», «011» а не 1,10,11. А теперь у меня возникла идея, что бы после вызова данного метода в другом классе можно было в том же классе сохранить выдаваемое значение из тела текущего метода а именно «temp». но как реализовать это я пока не могу придумать) есть идеи?
Как перевести число в двоичную систему 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 ограничиться целыми позитивными числами до шестнадцатеричной системы. Она нам важна, так как в ней информатике хранят цветовую гамму.
Дополнительные ссылки #
- Бинарные(двоичные) числа в Java — официальная документация.
- Троичный компьютер
- Шестнадцатеричная система
- Двадцатиричная система
- Шести десятеричная
- Двенадцатеричная система счисления
- Цифры майя
- Пример применения — https://smallseotools.com/de/rgb-to-hex/
Домашнее задание #
- Ознакомиться со всеми дополнительными ссылками.
- Написать метод, который “вычитывает из строковых литералов десятичные и двоичные числа. Используйте метод — » Integer.parseInt();
- Написать свой собственный класс ConvertDigits
- добавить интерактивность, общение программы с пользователем.
- не использовать цикл while.
Задачи с очень повышенным уровнем сложности. #
- Написать метод, который решает вопрос с делением на числа из систем свыше десятичной — 11-16.
- (Факультатив)Написать метод перевода числа из “любой” системы в десятичную. // Мы вернёмся к этому методу в будущем.
