Как перевести из десятичной в двоичную c

от admin

Преобразование десятичного числа в двоичное в C++

В этом посте мы обсудим, как преобразовать десятичное число в двоичное в C++.

1. Использование std::bitset

Стандартное решение для преобразования числа в его двоичный формат в C++ использует std::bitset . Идея состоит в том, чтобы построить объект-контейнер битового набора с битовыми значениями указанного числа и вызвать to_string функция, чтобы получить std::string представляющие биты в наборе битов с ведущими нулями.

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Двоичная система счисления: как переводить, как реализовать на C и C#

Что такое двоичная система счисления?

Это такая бинарная система счисления (бинарная, потому что у неё имеется лишь два основания, т. е. две цифры — «0» и «1»), которая используется в самой основе компьютера, так как в компьютерных схемах, процессорах, платах имеются, так называемые, выключатели (или биты). Если на какой-либо схеме выключатель поставлен в позицию выкл., то ему соответствует цифра «0», если вкл. — «1». Благодаря таким вот массовым чередованиям позиций вкл\выкл и соответствующим им единиц и нулей и работают абсолютно все компьютеры.

Последовательность этих цифр, приводящая к каким-либо результатам в работе компьютера, называется машинным кодом — это самый сложный и самый низкий язык программирования, но раньше люди умудрялись программировать и на нём. Сейчас же эти коды обрамляются в более легкие и понятные ключевые слова, и формы, которые в последствии составляют различные языки программирования. Абсолютно все языки программирования в своей основе имеют под собой работу машинного кода, любая функция, любой оператор, любой метод записан в машинном коде в виде огромной последовательности единиц и нулей. Любой printf в С или Console.WriteLine обязательно разлагаются для компьютера на машинный код, только так он и может понять, что мы от него хотим.

Переводом исходного кода какого-либо языка программирования в машинный код занимается компилятор.

Алгоритм перевода в двоичную систему счисления из десятеричной.

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

Итак, например, у нас имеется число 12 в десятеричной системе счисления, давайте переведем его в двоичную. Можно сделать это несколькими формами записи, кому как удобно.

Рассмотрим первый вариант. Он будет похож на несколько видоизменённое деление в столбик, и выглядеть будет вот так:

Теперь разберём, что тут написано. Сначала мы, как и в делении в столбик, пишем число, которое мы хотим делить (12), и число, на которое делим (в двоичной системе счисления это всегда 2).

12, делённое на 2 без остатка будет равно 6. Записываем это как положено в делении в столбик.

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Итак, теперь стоит сказать самое главное о переводе чисел из десятичной системы счисления в двоичную: если число делится на двойку без остатка, то мы пишем ноль, если с остатком — единицу.

Рассмотрим это правило поподробнее. Мы уже сказали, что 12 / 2 =6. Остатка у нас нет. Значит мы пишем ноль. В данном методе разбора мы пишем его под цифрой 6.

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Кусочек двоичного кода мы уже получили. Вычисляем дальше.

Теперь мы делим 6 на 2. Получается 3, и опять деление прошло без остатка — опять мы пишем, уже под тройкой, ноль.

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Теперь делим 3 на 2. На этот раз мы понимаем, что получается ответ с остатком — 1 и 0.5. Если происходит такое, то мы откидываем полученный остаток и делим полученное число без остатка на два, при этом подписываем ниже единицу.

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Далее нам стоит запомнить, что мы всегда делим последнюю единицу на два. Всегда после того или иного вычисления двоичного числа у нас так или иначе в итоге получается число 1 (как на примере, при делении 3 на 2). И абсолютно всегда мы его делим на 2. И абсолютно всегда последней цифрой в последовательности наших нулей и единиц будет цифра 1, так как все числа в двоичной системе счисления начинаются с единицы (исключение — 0, в двоичной системе счисление он и будет записан как 0).

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Мы поделили наше число 12, и у нас получилась последовательность: два нуля и две единицы. Однако это ещё не всё. Последний аспект, который надо запомнить — мы считываем двоичное число снизу вверх .

Читать:
Как установить ssl сертификат на сайт joomla

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Поэтому мы считаем нашу последовательность «с конца», и у нас получается число 1100. Это и есть ответ.

Теперь давайте рассмотрим вторую форму записи такого деления. Она менее громоздка, но по сути является той же самой формой деления.

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

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

Реализация перевода числа из десятичной системы счисления в двоичную на языке C#

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

Здравствуйте товарищи знатоки! Написал такую программу которая переводит десятичные числа в двоичные. Но есть одно НО. Работает она правильно только с некоторыми числами. Например если ввести 12 или 36 С другими очень криво. Например:

  • Ответ 100 выводится при числах от 4 до 7
  • Ответ 0100 выводится от 8 до 11
  • Ответ 1100 выводится от 12 до 15
  • Ответ 00100 выводится от 16 до 19
  • Ответ 10100 выводится от 20 до 23
  • Ответ 01100 выводится от 24 до 27
  • Ответ 11100 выводится от 28 до 31
  • Ответ 000100 выводится от 32 до 35
  • Ответ 100100 выводится от 36 до 39

Дальше ответ идет 010100 от 40 и т.д.

Сам не могу разобраться так как задали мне работу с телефонами. По этому прошу Вашей помощи. Вот собственно код: (Он очень примитивный)

VladD's user avatar

Вы делаете неправильно. Вы пытаетесь построить такое число, чтобы если его вывести как десятичное, получилось двоичное представление числа.

Это не правильно, так делать не надо, это лишь приведёт к проблемам. Нужно различать само число (переменную числового типа) и его представление в той или иной системе счисления (строку).

Для случая, когда вам нужно обрабатывать и отрицательные числа, нужна небольшая модификация:

Это решение естественно обобщается на произвольный тип:

(Код частично украден из этого ответа.)

Величина std::numeric_limits<T>::digits представляет количество бит в знаковом целочисленном типе, участвующих в представлении значения (без учёта знакового бита и битов заполнения (padding bits)), соответственно даёт количество двоичных цифр в самой длинной строке (за исключиением отрицательного минимума).

Лабораторная работа по C#. Перевод числа из десятичной системы в двоичную

Задача: написать рекурсивный метод перевода любого целого десятичного числа в двоичную систему, например, 78 = 01001110.

Теоретическая часть

Чтобы перевести число из десятичной системы в двоичную необходимо последовательно делить число на 2 до тех пор, пока частное от деления не станет равным нулю и, затем, переписать остатки от деления в обратном порядке. Например, возьмем число 78. Производим последовательное деление:

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

Записываем остатки от деления на 2 в обратном порядке и получаем следующую последовательность: 1001110. Это и будет двоичное представление числа 78.

Так как все промежуточные вычисления в рекурсивных методах сохраняются в стеке, то это позволяет нам без лишних действий по перестановке местами чисел 0 и 1 написать рекурсивный метод (в стеке действует правило «LIFO — Last In First Out» — последний пришел — первый вышел).

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

Развернутый вариант метода перевода десятичного числа в двоичную систему с использованием рекурсии:

Этот же метод можно записать с использованием тернарной операции (сокращенной проверкой) следующим образом:

Проверим работу метода. Для этого мы можем воспользоваться обычным калькулятором. Переведем число 50 в двоичную систему:

50 в двоичной системе

Проведем теперь операцию перевода в двоичную систему, используя нашу программу:

Результат в консоли:

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

Решение лабораторной работы (исходный код)

Ниже представлен исходный код программы для перевода любого числа из десятичной системы в двоичную:

Результат работы программы:

Итого

Сегодня мы разработали консольное приложение для перевода числа из десятичной системы в двоичную, используя рекурсию. Благодаря тому, что в рекурсивных методах используется стек, нам не пришлось проводить никаких дополнительных преобразований полученной строки, представляющей число в двоичной форме. Стоит отметить, что в C# имеются готовые методы для таких операций преобразования.

Похожие статьи