- Двоичные числа и двоичная система счисления. Перевод числа в двоичную систему счисления из десятичной
- Введение
- Десятичные цифры и числа, разряды в числах
- Двоичные цифры и числа, а также их запись
- Преобразование чисел из десятичной системы счисления в двоичную
- Преобразование чисел из двоичной системы счисления в десятичную
- Сложение, вычитание, умножение двоичных чисел и другие операции с двоичными числами
- Сложение двоичных чисел
- Вычитание двоичных чисел
- Умножение двоичных чисел
- Операции булевой алгебры
- Операция «Логическое И» или AND
Двоичные числа и двоичная система счисления. Перевод числа в двоичную систему счисления из десятичной
- Мы продолжаем изучать основы компьютерных сетей и протокола сетевого уровня IP, а точнее его версии IPv4. На первый взгляд тема двоичных чисел и двоичной системы счисления не имеет ничего общего с протоколом IP, но если вспомнить, что компьютеры работают с нулями и единицами, оказывается, что двоичная система и ее понимание лежат в основе Основы, мы должны научиться переводить числа из двоичной системы счисления в десятичную и наоборот: из десятичной в двоичную. Это поможет нам лучше понять протокол IP и принцип работы сетевых масок переменной длины. Давайте начнем!
Введение
Прежде чем мы начнем, стоит объяснить, зачем сетевому инженеру эта тема. Хотя вы можете убедиться в его необходимости, когда мы говорили о структуре IP-адреса, вы можете сказать, что существуют IP-калькуляторы, которые значительно облегчают задачу выделения IP-адресов, расчета необходимых подсетей / сетевых масок и определения номера сети и узла.number в IP-адресе. Правильно, но калькулятор IP не всегда под рукой, причина в количестве раз. Причина номер два заключается в том, что на экзаменах Cisco вам не будет предоставлен IP-калькулятор, и вам придется выполнять все преобразования десятичного IP-адреса в двоичный на листе бумаги и задавать вопросы там, где это требуется на экзамене / экзаменах для получение сертификата CCNA не так уж и мало, будет обидно, если по такой мелочи экзамен будет завален. Наконец, понимание двоичной системы счисления приводит к лучшему пониманию того, как работают компьютерные сети.
В общем, сетевому инженеру не нужно уметь переводить числа из двоичного в десятичное и наоборот. Кроме того, это редко кто знает мысленно, в основном к этой категории относятся преподаватели различных курсов по компьютерным сетям, так как им приходится постоянно с этим сталкиваться изо дня в день. Но с помощью листа бумаги и ручки вы должны научиться переводить.
Десятичные цифры и числа, разряды в числах
Давайте начнем с простого и поговорим о двоичных числах и числах, вы знаете, что числа и числа — это разные вещи. Число — это специальный символ для обозначения, а число — это абстрактное обозначение, которое означает количество. Например, чтобы написать, что у нас пять пальцев на руке, мы можем использовать римские и арабские цифры: V и 5. В этом случае пять одновременно является числом и цифрой. И, например, чтобы написать число 20, мы используем две цифры: 2 и 0.
Всего в десятичной системе счисления у нас есть десять цифр или десять символов (0,1,2,3,4,5,6,7,8,9), комбинируя которые, мы можем писать разные числа. Каким принципом мы руководствуемся, используя десятичную систему счисления? Да, все очень просто, так или иначе возьмем десятку, например, возьмем число 321. Как это можно записать по-другому, а вот так: 3 * 102 + 2 * 101 + 1 * 100. Следовательно, оно оказывается, что число 321 представляет собой три цифры:
- Цифра 3 обозначает старшую цифру, или в данном случае это место сотен, иначе их количество.
- Цифра 2 в десятках, у нас две десятки.
- Цифра один относится к наименее значащей цифре.
То есть на этой записи двойка — это не просто двойка, а две десятки или два раза по десять. Тройка — это не просто тройка, а трижды по сотне. Получается такая зависимость: единица каждой последующей цифры в десять раз больше единицы предыдущей, потому что 300 — это трижды сотня. Чтобы упростить понимание двоичной системы, необходимо было сделать отступление в десятичную систему.
Двоичные цифры и числа, а также их запись
В двоичной системе всего две цифры: 0 и 1. Поэтому представление числа в двоичной системе часто намного больше, чем десятичное. За исключением чисел 0 и 1, ноль в двоичной системе счисления равен нулю в десятичной системе счисления, и то же самое верно и для единицы. Иногда, чтобы не путать систему нумерации, в которой написан номер, используются субиндексы: 26710, 1010012, 47128. Число в субиндексе указывает на систему нумерации.
Символы 0b и & (амперсанд) можно использовать для записи двоичных чисел: 0b10111 и 111. Если в десятичной системе счисления для произношения числа 245 мы используем такую конструкцию: двести сорок пять, то в двоичном числе В системе счисления, чтобы назвать число, мы должны произносить одну цифру из каждой цифры, например, число 1100 в двоичной системе счисления должно произноситься не как тысяча сотен, а как один, один, ноль, ноль. Давайте посмотрим, как числа 0-10 записываются в двоичном формате:
Таблица 4.4.1 Двоичные и десятичные числа
Думаю, логика уже должна быть ясна. Если в десятичной системе счисления для каждой цифры у нас было десять вариантов (от 0 до 9 включительно), то в двоичной системе счисления в каждой из цифр двоичного числа у нас всего два варианта: 0 или 1.
Для работы с IP-адресами и масками подсети нам достаточно натуральных чисел в двоичной системе, хотя двоичная система позволяет записывать дробные и отрицательные числа, но нам они не нужны.
Преобразование чисел из десятичной системы счисления в двоичную
Давайте лучше разберемся, как преобразовать число из десятичного в двоичное. А здесь на самом деле все очень и очень просто, хотя это сложно объяснить словами, поэтому сразу приведу пример перевода чисел из десятичной в двоичную систему счисления. Возьмем число 61, чтобы преобразовать его в двоичную систему, нам нужно разделить это число на два и посмотреть, каков остаток от деления. И результат деления снова делится на два. В этом случае 61 — это делимое, в качестве делителя у нас всегда будет два, и мы снова делим частное (результат деления) на два, мы продолжаем деление, пока в частном не будет 1, последняя единица будет самой левой цифра… Следующий рисунок демонстрирует это.
4.4.1 Длинное деление для преобразования десятичных дробей в двоичные
При этом обратите внимание, что число 61 — это не 101111, а 111101, то есть результат записываем с конца. Нет смысла делить единицу в последней детали на два, так как в этом случае используется целочисленное деление, и при таком подходе получается, как на рисунке 4.4.2.
4.4.2 Целочисленное деление единицы на два
Это не самый быстрый способ преобразовать число из двоичного в десятичное. У нас есть несколько ускорителей. Например, число 7 в двоичной системе счисления записывается как 111, число 3 как 11 и число 255 как 11111111. Все эти случаи шокирующе просты. Дело в том, что числа 8, 4 и 256 являются степенями двойки, а числа 7, 3 и 255 — на единицу меньше этих чисел. Итак, для числа, которое на единицу меньше числа, равного степени двойки, применяется простое правило: в двоичной системе десятичное число записывается как число единицы, равное степени двойки.
Так, например, число 256 равно двум в восьмой степени, поэтому 255 записывается как 11111111, а число 8 равно двум в третьей степени, и это говорит нам, что 7 в двоичной системе будет записано как 111 понимаете, также как записать 256, 4 и 8 в двоичной системе нетрудно, просто добавьте единицу: 256 = 11111111 + 1 = 10000000; 8 = 111 + 1 = 1000; 4 = 11 + 1 = 100.
Вы можете проверить любые свои результаты на калькуляторе, и лучше сначала сделать это.
4.4.3 Проверка результата перевода на калькуляторе
Как видите, мы еще не разучились делить. А теперь можно двигаться дальше.
Преобразование чисел из двоичной системы счисления в десятичную
Преобразование чисел из двоичной системы счисления намного проще, чем преобразование из десятичной в двоичную. В качестве примера перевода мы будем использовать число 11110. Обратите внимание на таблицу ниже, она показывает степень, в которой вам нужно возвести двойку, чтобы позже получить десятичное число.
Таблица 4.4.2 Двоичное число и степень
Чтобы получить из этого двоичного числа десятичную дробь, нужно каждое число в цифре умножить на два в степени, затем сложить результаты умножения, проще показать:
1 * 24 + 1 * 23 + 1 * 22 + 1 * 21 + 0 * 20 = 16 + 8 + 4 + 2 + 0 = 30
Откроем калькулятор и убедимся, что 30 в десятичной системе счисления равно 11110 в двоичной системе счисления.
4.4.4 Проверка результата преобразования двоичного числа в десятичное на калькуляторе
Мы видим, что все сделано правильно. Пример показывает, что преобразовать число из двоичной системы счисления в десятичную намного проще, чем преобразовать обратно. Для безопасной работы с протоколом IP нужно просто запомнить степени двойки до 28. Для наглядности приведу таблицу.
Таблица 4.4.3 Степень двойки
Он нам больше не нужен, так как максимально возможное число, которое можно записать в одном байте (8 бит или восемь двоичных значений), равно 255, то есть в каждом октете IP-адреса или маски подсети IPv4 максимально возможное значение равно 255. В IP в пакете есть поля со значениями больше 255, но вычислять их необязательно.
Читайте также: Схема активного сопротивления: как зависит от частоты в цепи переменного тока
Сложение, вычитание, умножение двоичных чисел и другие операции с двоичными числами
Давайте теперь посмотрим на операции, которые можно выполнять с двоичными числами. Начнем с простых арифметических операций, а затем перейдем к операциям булевой алгебры.
Сложение двоичных чисел
Сложить двоичные числа не так уж и сложно: 1 + 0 = 1; 1 + 1 = 0 (поясню позже); 0 + 0 = 0. Это были простые примеры, когда использовалась только одна цифра, давайте рассмотрим примеры, когда количество цифр больше единицы.
101 + 1101 в десятичной системе счисления, это будет 5 + 13 = 18. Давайте посчитаем в столбце.
Таблица 4.4.4 Сумма столбцов двоичных чисел
Результат выделен оранжевым цветом, калькулятор говорит, что мы посчитали правильно, можете проверить. Теперь давайте посмотрим, почему это произошло, потому что сначала я написал, что 1 + 1 = 0, но это для случая, когда у нас есть только один бит, для случаев, когда есть более одного бит, 1 + 1 = 10 (или два в десятичной системе счисления), что логично.
Так что посмотрим, что получится, складываем по цифрам справа налево:
- 1 + 1 = 10, мы пишем ноль и единица переходит к следующей цифре.
- В следующем бите получается 0 + 0 + 1 = 1 (эта единица пришла к нам в результате сложения в точке 1).
- Итак, у нас есть выражение 1 + 1 = 10, поэтому мы пишем 0 в результате бита, и единица переходит к следующему.
- Здесь у нас есть единица только для второго числа, но здесь она все равно передается, поэтому 0 + 1 + 1 = 10.
- Склеиваем все вместе: 10 | 0 | 1 | 0.
Если лень в столбце, то считаем так: 101011 + 11011 или 43 + 27 = 70. Как тут можно, а посмотрим, ведь никто нам не запрещает делать конверсии и сумма не меняется от изменения положение терминов, к двоичной системе это правило также применяется.
- 101011 = 101000 + 11 = 101000 + 10 + 1 = 100000 + 1000 + 10 + 1.
- 11011 = 11000 + 10 + 1 = 10000 + 1000 + 10 + 1.
- 100000 + 10000 + (1000 +1000) + (10 + 10) + (1 + 1).
- 100000 + (10000 + 10000) + 100 + 10.
- 100000 + 100000 +110
- 1000000 + 110.
- 1000110.
Вы можете проверить с помощью калькулятора, 1000110 в двоичном формате и 70 в десятичном.
Вычитание двоичных чисел
Просто пример вычитания однозначных чисел в двоичной системе, мы не говорили об отрицательных числах, поэтому не будем принимать во внимание 0-1: 1 — 0 = 1; 0 — 0 = 0; 1 — 1 = 0. Если цифр больше одной, все тоже просто, правда никаких столбцов и ухищрений не нужно: 110111 — 1000, оно равно 55 — 8. В итоге получаем 101111. И сердце перестал печатать, откуда взялась единица в третьей цифре (нумерация слева направо и с нуля)? Просто! Во втором бите числа 110111 стоит 0, а в первом бите стоит 1 (если предположить, что нумерация цифр начинается с 0 и идет слева направо), но мы получаем единицу четвертого бита добавляя две единицы третьего бита (мы получаем что-то вроде виртуальных двух), и из этих двух мы вычитаем единицу, которая находится в нулевом бите числа 1000, ну и 2 — 1 = 1, ну и 1 равно допустимая цифра в двоичной системе счисления.
Умножение двоичных чисел
Осталось рассмотреть умножение двоичных чисел, которое реализуется сдвигом на один бит влево. Но сначала давайте посмотрим на результаты однобитового умножения: 1 * 1 = 1; 1 * 0 = 0 0 * 0 = 0. На самом деле все просто, теперь давайте рассмотрим что-нибудь посложнее. Возьмите числа 101001 (41) и 1100 (12). Умножаем на один столбик.
Таблица 4.4.5 Умножение двоичных чисел в столбце
Если из таблицы не понятно, как это произошло, я постараюсь объяснить словами:
- двоичные числа удобно умножать в один столбец, поэтому второй множитель пишем под первым, если числа с разным количеством цифр, то будет удобнее, если наибольшее число будет сверху.
- Следующим шагом будет умножение всех цифр первого числа на младшую значащую цифру второго числа. Ниже записываем результат умножения, при этом нужно писать так, чтобы под каждым соответствующим битом записывался результат умножения.
- Теперь нам нужно умножить все цифры первого числа на следующую цифру второго числа и записать результат в другой строке ниже, но этот результат нужно сдвинуть на одну цифру влево, если посмотреть в таблицу, то это — вторая последовательность нулей сверху.
- То же самое необходимо сделать для последующих цифр, каждый раз перемещая одну цифру влево, и если вы посмотрите на таблицу, вы можете сказать, что на одну ячейку влево.
- У нас есть четыре двоичных числа, которые нам нужно сложить сейчас и получить результат. Недавно доработали дополнение, проблем быть не должно.
В общем, операция умножения не так уж и сложна, нужно лишь немного попрактиковаться.
Операции булевой алгебры
В булевой алгебре есть два очень важных понятия: истина и ложь, которые эквивалентны нулю и единице в двоичной системе счисления. Операторы булевой алгебры расширяют число операторов, доступных для этих значений, давайте взглянем на них.
Операция «Логическое И» или AND
Логическая операция И или И эквивалентна умножению однобитовых двоичных чисел.
PHP1 AND 1 = 1; 1 AND 0 = 1; 0 E 0 = 0; 0 E 1 = 0.
1234 | 1AND1 = 1; 1AND0 = 1; 0AND0 = 0; 0AND1 = 0. |