Что такое двоичная система счисления?
Это такая бинарная система счисления (бинарная, потому что у неё имеется лишь два основания, т. е. две цифры — «0» и «1»), которая используется в самой основе компьютера, так как в компьютерных схемах, процессорах, платах имеются, так называемые, выключатели (или биты). Если на какой-либо схеме выключатель поставлен в позицию выкл., то ему соответствует цифра «0», если вкл. — «1». Благодаря таким вот массовым чередованиям позиций вкл\выкл и соответствующим им единиц и нулей и работают абсолютно все компьютеры.
Последовательность этих цифр, приводящая к каким-либо результатам в работе компьютера, называется машинным кодом — это самый сложный и самый низкий язык программирования, но раньше люди умудрялись программировать и на нём. Сейчас же эти коды обрамляются в более легкие и понятные ключевые слова, и формы, которые в последствии составляют различные языки программирования. Абсолютно все языки программирования в своей основе имеют под собой работу машинного кода, любая функция, любой оператор, любой метод записан в машинном коде в виде огромной последовательности единиц и нулей. Любой printf в С или Console.WriteLine обязательно разлагаются для компьютера на машинный код, только так он и может понять, что мы от него хотим.
Переводом исходного кода какого-либо языка программирования в машинный код занимается компилятор.
Алгоритм перевода в двоичную систему счисления из десятеричной.
Теперь рассмотрим алгоритм перевода каких-либо чисел из стандартной, десятеричной системы счисления в двоичную.
Итак, например, у нас имеется число 12 в десятеричной системе счисления, давайте переведем его в двоичную. Можно сделать это несколькими формами записи, кому как удобно.
Рассмотрим первый вариант. Он будет похож на несколько видоизменённое деление в столбик, и выглядеть будет вот так:
Теперь разберём, что тут написано. Сначала мы, как и в делении в столбик, пишем число, которое мы хотим делить (12), и число, на которое делим (в двоичной системе счисления это всегда 2).
12, делённое на 2 без остатка будет равно 6. Записываем это как положено в делении в столбик.
Итак, теперь стоит сказать самое главное о переводе чисел из десятичной системы счисления в двоичную: если число делится на двойку без остатка, то мы пишем ноль, если с остатком — единицу.
Рассмотрим это правило поподробнее. Мы уже сказали, что 12 / 2 =6. Остатка у нас нет. Значит мы пишем ноль. В данном методе разбора мы пишем его под цифрой 6.
Кусочек двоичного кода мы уже получили. Вычисляем дальше.
Теперь мы делим 6 на 2. Получается 3, и опять деление прошло без остатка — опять мы пишем, уже под тройкой, ноль.
Теперь делим 3 на 2. На этот раз мы понимаем, что получается ответ с остатком — 1 и 0.5. Если происходит такое, то мы откидываем полученный остаток и делим полученное число без остатка на два, при этом подписываем ниже единицу.
Далее нам стоит запомнить, что мы всегда делим последнюю единицу на два. Всегда после того или иного вычисления двоичного числа у нас так или иначе в итоге получается число 1 (как на примере, при делении 3 на 2). И абсолютно всегда мы его делим на 2. И абсолютно всегда последней цифрой в последовательности наших нулей и единиц будет цифра 1, так как все числа в двоичной системе счисления начинаются с единицы (исключение — 0, в двоичной системе счисление он и будет записан как 0).
Мы поделили наше число 12, и у нас получилась последовательность: два нуля и две единицы. Однако это ещё не всё. Последний аспект, который надо запомнить — мы считываем двоичное число снизу вверх.
Поэтому мы считаем нашу последовательность «с конца», и у нас получается число 1100. Это и есть ответ.
Теперь давайте рассмотрим вторую форму записи такого деления. Она менее громоздка, но по сути является той же самой формой деления.
Здесь мы просто делим получаемые числа на два через черту, и, если частное получается без остатка, через тире пишем 0, если с остатком — 1. Опять же не забываем округлять числа с остатком в меньшую сторону, делить последнюю единицу на двойку и считывать последовательность в обратном порядке.
Реализация перевода числа из десятичной системы счисления в двоичную на языке C#
Реализация перевода десятичного числа в двоичное в C# невероятно проста и понятна. Отвечает за эту реализацию метод Convert.ToString, и выглядеть это будет вот так:
1 |
string s = Convert.ToString(Int32, 2); |
Сам по себе Convert.ToString отвечает за конвертацию переменных каких-либо других типов в тип string — тип строки.
string s — это объявленная переменная строкового типа. В неё и будет записан результат, полученный из правой части записи, то есть, число, переведенное в двоичную систему счисления.
Int32 в скобках — это та числовая переменная типа int, чьё значение мы будем переводить в двоичную систему счисления, понятное дело, что вместо Int32 должно стоять имя переменной (можно посмотреть пример ниже).
Цифра 2 в скобках — это своеобразная подсказка компьютеру, которая говорит ему, что перевод должен осуществляться именно в двоичную (оттого и двойка) систему счисления, а не в какую-либо другую. Так, например, для перевода в шестнадцатеричную систему счисления, вместо цифры 2 надо всего-навсего поставить число 16.
Простой пример перевода десятичного числа в двоичное можно посмотреть ниже:
1 2 3 4 5 6 7 8 |
static void Main(string[] args) { Console.WriteLine("Введите десятичное число:"); int i = Convert.ToInt32(Console.ReadLine()); string s= Convert.ToString(i, 2); Console.WriteLine("В двоичной системе счисления это: "+s); Console.ReadLine(); } |
Вывод будет вот таким:
Реализация перевода числа из десятичной системы счисления в двоичную на языке C
В языке C, к сожалению, нет подобных методов и команд, поэтому придётся для такого перевода писать программу. Выглядеть она будет так:
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 29 30 31 32 33 34 35 36 |
#include <malloc.h> //подключаем все нужные библиотеки #include <stdio.h> #include <locale> #include <conio.h> int main() { setlocale(LC_ALL,"Russian"); //подключаем русский язык int a; int n = 20; //до 20ти чисел в двоичной системе программа будет в себя вмещать. В десятичной системе счисления крайним числом, которое вместит программа будет 524287. printf("Введите десятичное число: "); scanf_s ("%i", &a); char* c; // создаём массив char c = (char *)malloc(n * sizeof(char)); //выделяем под него место int k = 0; while (a > 1) //переводим число в двоичную систему, однако полученные у нас единицы и нули будут в обратном порядке. { c[k++] = (a % 2) + '0'; a = a / 2; } c[k++] = a + '0'; c[k] = '\0'; char tmp; for (int i = 0; i < k / 2; i++) //здесь мы переворачиваем полученное число наоборот { tmp = c[i]; c[i] = c[k - 1 - i]; c[k - 1 - i] = tmp; } printf("В двоичной системе это: "); //выводим ответ for (int i = 0; i < k; i++) printf("%c", c[i]); free(c); _getch(); return 0; } |
Вот и всё, мы разобрали практически все аспекты перевода десятичного числа в двоичное.
Ниже можно будет скачать программы, описанные выше, на С# и C.
Скачать исходник для языка C Скачать исходник для языка C#
Поделиться в соц. сетях: