Системы счисления

Что такое системы счисления
«У меня день рождения двадцать третьего ноль седьмого две тысячи одиннадцатого года».
«Мы идём в кино пятнадцатого числа в восемнадцать двадцать пять».
«Мой номер — восемь девять два один пятьсот шестьдесят три четырнадцать ноль девять».
Представляешь, как было бы неудобно, если бы мы все цифры записывали буквами?
Система счисления (СС) — это совокупность правил и приемов записи чисел с помощью набора символов или цифровых знаков.
Любая СС — это как язык, только для чисел. Мы же используем разные символы для записи одного и того же слова в разных языках? Вот точно так же используются разные символы для записи одного и того же числа.
Символы СС обычно называют цифрами, а их совокупность — алфавитом.
У любой системы счисления есть основание.
Основание СС — это количество символов в алфавите системы счисления.
Основание записывается справа от числа в нижнем индексе. Если справа от числа в нижнем индексе стоит цифра 6, мы знаем, что в алфавите СС 6 символов, начиная с 0: 0,1,2,3,4,5.
Примеры:
345 — 34 в пятеричной СС, всего в этой системе счисления 5 символов: 0,1,2,3,4
7810 — 78 в десятичной СС, всего в ней 10 символов: 0,1,2,3,4,5,6,7,8,9
10102 — 1010 в двоичной СС, всего в ней 2 символа: 0,1
Различают два типа систем счисления: непозиционные и позиционные. Поговорим о них ниже.
Непозиционные
Непозиционные СС — это системы счисления, в которых значение цифры в числе не зависит от ее места в записи числа.
Легко запомнить: непозиционные — значение не зависит от позиции.
Самой первой системой счисления в истории человечества была непозиционная СС, в которой использовался только один знак. Она называется унарной.
Легко запомнить: вспомни песню «Уно».
Уно — значит «один», то есть это СС, в алфавите которой всего один символ. Иначе их еще называют символьными: для записи чисел люди использовали камешки, засечки, веточки — что под руку попадалось.
И все шло хорошо, пока людям не понадобилось записывать достаточно длинные числа.
Представляешь, как неудобно торговать? Пока записываешь, сколько рыбы продал, она вся стухнуть успеет!
Поэтому древние люди решили заменять какое-то конкретное количество палочек другими символами.
Пример таких символов — римские цифры. Римская СС основана на символах I, V, X, L, C, D, M, которые означают соответственно 1, 5, 10, 50, 100, 500, 1000. При этом при записи числа располагаются от большего к меньшему.
А если меньшее все-таки стоит слева от большего — то меньшее следует вычесть.
Пример:
Сравним римские числа CXVI и CXIV
В числе CXVI символы стоят в порядке от меньшего к большему, то есть мы их все просто складываем: С (100) + Х (10) + V (5) + I(1) = 116.
В числе CXIV не все символы стоят в порядке возрастания, I(1) стоит слева от V (5), то есть из 5 нужно вычесть 1: С (100) + Х (10) + V (5) - I(1) = 114
То есть CXVI больше, чем CXIV.
Но и эта система при записи больших чисел довольно сложна для записи и восприятия. Поэтому человечество подумало ещё и изобрело позиционные системы счисления.
Позиционные
Позиционные СС — это метод представления чисел, в котором значение каждой цифры определяется её позицией в записи числа.
Простейший пример позиционной системы — десятичная СС, с которой мы сталкиваемся ежедневно.
Что значит «значение зависит от позиции»? На примере: возьмем цифры 3, 4, 6. Из них мы можем составить числа 346, 364, 436, 463, 634, 643. И в каждом из них цифры 3, 4 и 6 будут значит разное.
346: 3 — значит 300, 4 — 40, 6 — 6.
463: 4 — значит 400, 6 — 60, 3 — 3.
634: 6 — значит 600, 3 — 30, 4 — 4.
С десятичной понятно, да? Однако существуют и другие популярные СС, такие как двоичная, восьмеричная и шестнадцатеричная. Про каждую расскажем отдельно.
Десятичная
Самая привычная нам СС, мы используем ее в быту каждый день.
Так как в алфавите десятичной системы 10 символов (от 0 до 9), то каждая позиция числа представляет собой степень десятки: от 0 степени до бесконечности.
Пример:
Разложим по позициям 621.
Если бы это число было записано в непозиционной СС, то его значение равнялось бы 6+2+1=9.
Но в позиционной десятичной системе каждая цифра числа имеет свое значение в зависимости от разряда: 621 = 600 + 20 + 1. Если представить это в степенях десятки, получится запись: 621 = 6*102 + 2*101 + 1*100
Двоичная
Эту систему придумал еще до 19 века немецкий ученый Г.В. Лейбниц, и в ней используются всего два символа: 0 и 1.
Сейчас двоичная СС максимально распространена в компьютерах. Ведь техника не работает на основе двоичной логики: 1 и 0, да и нет, сеть и отсутствие сети…
Из плюсов: таким способом закодировать можно все, что угодно. Из минусов — кодирование выглядит как огромный массив и занимает очень много места.
Пример:
Разложим по позициям 1011.
Если бы оно было записано в непозиционной СС, то его значение равнялось бы 1+0+1+1=3.
В позиционной двоичной СС мы представляем это число в степенях основания СС (то есть в степенях двойки). Получаем 10112 = 1*23 + 0*22 + 1*21 + 1*20
Восьмеричная
Как ты уже догадываешься, в восьмеричной СС — 8 символов: от 0 до 7.
Раньше она часто использовалась в программировании, сейчас менее популярна, но на экзаменах встречается достаточно часто.
Пример:
Разложим по позициям 5648
Представляем число в степенях основания, то есть в степенях восьмерки. Получаем 5648 = 5*82 + 6*81 + 4*80
Обрати внимание: если писать все числа восьмеричной СС по порядку (составить числовой ряд), то после числа 8 будет идти 10: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12… Потому что цифры 9 в восьмеричной СС нет!
Шестнадцатеричная
Вот тут всё интереснее. В алфавите шестнадцатеричной СС — 16 символов: 0-9 и A–F. Да-да, чтобы не путаться, где написано 10, а где 1 и 0, все цифры после 9 в этой системе заменены буквами латинского алфавита.
Алфавит шестнадцатеричной СС выглядит так:
Обрати внимание: в числовом ряду шестнадцатеричных чисел после 9 идет А, а после F идет 10. То есть он выглядит так: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12…
Шестнадцатеричная СС до сих пор очень популярна в программировании, особенно при работе с адресами памяти и цветами при записи в RGB.
Перевод из одной системы счисления в другую
Чтобы освоить перевод систем счисления из одной в другую, тебе потребуется умение делить и понимание развернутой записи числа. Мы этого уже коснулись, но сейчас объясним максимально подробно.
Развернутая форма записи числа – это запись в виде разрядных слагаемых, записанных с помощью степени соответствующего разряда и основания степени (основание счета).
Развернутая форма записи числа в любой позиционной системе счисления выглядит так:
Aq = an-1 * qn-1 + an-2 * qn-2 + an-3 * qn-3 …+ a0 * q0 …+ a-m * q-m
Что есть что в этой страшной формуле?
A — само число (то, что нам надо развернуть)
q — основание системы счисления (то, сколько символов в алфавите)
ai — цифры нашего числа по порядку записи
n — количество разрядов целой части числа
m — количество разрядов дробной части числа (если она есть)
Кажется, сложно? А ведь это почти начальная школа!
Да-да, в начальной школе мы все это уже делали.
Нас просили записать число 345 развернуто, и мы писали 345 = 300 + 40 + 5.
Но постой-ка… Ведь мы уже знаем, что такое степень числа! Поэтому смело можем записать это иначе:
345 = 3*102 + 4*101 + 5*100
Видишь сходство с той страшной записью выше? Мы уже делали развернутую запись в десятичной СС. А сейчас на примерах разберемся, как сделать это в любой другой.
Примеры:
Допустим, нам надо записать развернуто 56421 в десятичной СС.
Наше A = 56421, q = 10, n = 5 (так как у нас 5 цифр в числе).
Чтобы не запутаться, сразу пронумеруем разряды:
Записываем:
5642110 = 5*104 + 6*103 + 4*102 + 2*101 + 1*100
Теперь записываем развернуто 1011012
Наше A = 101101, q = 2, n = 6 (так как у нас 6 цифр в числе).
Чтобы не запутаться, сразу пронумеруем разряды:
Записываем:
1011012 = 1*25 + 0*24 + 1*23 + 1*22 + 0*21 + 1*20
Восьмеричное число: 3568 = 3*82 + 5*81 + 6*80
Шестнадцатеричное число: 3A5С16 = 3*163 + A*162 + 5*161 + С*160
Примерно ясно? Используя развернутую форму, можно переводить числа из любой СС в десятичную.
Преобразование в десятичную систему счисления
Алгоритм максимально простой (если ты освоишь развернутую форму записи).
- Берем число в любой позиционной системе счисления
- Записываем его в развернутой форме
- Считаем получившийся результат (умножаем и суммируем то, что у нас в развернутой записи получилось)
Примеры:
Нужно перевести в десятичную систему 14738
Записываем в развернутой форме и выполняем вычисления:
14738 = 1∙83+4∙82+7∙81+3∙80 = 82710
Нужно перевести в десятичную систему 110A16
Записываем в развернутой форме и выполняем вычисления:
110A16 = 1∙163+1∙162+0∙161+A(10)∙160 = 436210
Нужно перевести в десятичную систему 1011012
Действуем аналогично:
1011012 = 1*25 + 0*24 + 1*23 + 1*22 + 0*21 + 1*20 = 4510
Преобразование из десятичной системы счисления
Чтобы преобразовывать в любую позиционную СС из десятичной, нам потребуется такой навык, как деление столбиком.
Алгоритм преобразования очень прост:
- Берем десятичное число
- Делим его на основание той системы счисления, в которую хотим перевести (нам надо перевести в шестнадцатеричную — делим на 16, в восьмеричную — на 8, в двоичную — на 2)
- Получившиеся в процессе деления остатки записываем в обратном порядке
Примеры:
Нам нужно перевести 5610 в двоичную систему счисления:
Для начала берем 56 и делим на основание желаемой системы, у нас это 2.
56 / 2 = 28 и остаток 0
28 / 2 = 14 и остаток 0
14 / 2 = 7 и остаток 0
7 / 2 = 3 и остаток 1
3 / 2 = 1 и остаток 1
1 / 2 = 0 и остаток 1
Теперь все остатки записываем в обратном порядке: 5610 = 1110002
А если 5610 нужно перевести в восьмеричную СС?
Тогда 56 мы будем делить на 8.
56 / 8 = 7 и остаток 0
7 / 8 = 0 и остаток 7
Записываем остатки в обратном порядке, получаем 5610 = 708
Тот же принцип с шестнадцатеричной.
Берем 5610, делим на 16.
56 / 16 = 3 и остаток 8
3 / 16 = 0 и остаток 3
Записываем остатки в обратном порядке, получаем 5610 = 3816
Обрати внимание: если первым остатком оказывается 0, то его можно не писать ни в какой системе счисления.
Пример:
Переведем 1410 в двоичную систему счисления:
14 / 2 = 7 и остаток 0
7 / 2 = 3 и остаток 1
3 / 2 = 1 и остаток 1
1 / 2 = 0 и остаток 1
Соберем остатки в обратном порядке: 01110. Первый остаток равен 0, его мы при записи числа в любой СС опускаем. Получается 1410 = 11102
Преобразование из двоичной в восьмеричную и шестнадцатеричную системы
Самый муторный способ — это выполнить перевод в два действия: сначала перевести в десятичную, а потом уже из десятичной в нужную.
Самый простой — воспользоваться калькулятором перевода (благо, в сети их хватает). Минус у этого решения один, но очевидный: на контрольных и экзаменах пользоваться таким способом не получится.
Так что разберемся, как выполнять переводы из двоичной в восьмеричную и шестнадцатеричную СС ручками.
Перевод в восьмеричную СС:
Алгоритм:
- Разбиваем двоичное число на группы по 3 цифры справа налево;
- Если в самой левой группе (последней) не хватает цифр, доставляем вместо недостающих первых цифр нули (перед остальными цифрами);
- В каждой полученной группе умножаем каждый разряд на 2n, где n — номер разряда;
- Получившиеся результаты записываем в том же порядке — это и будет число в восьмеричной СС.
Пример:
10112 = (1) (011) = (001) (011) =(0*22 + 0*21 + 1*20) (0*22 + 1*21 + 1*20) = (0+0+1) (0+2+1) = (1) (3) = 138
Если у тебя не очень хорошо с умножением, зато очень хорошо с памятью, есть другой способ. Так же делим число в двоичной системе на тройки (триады). А затем просто подставляем нужные значения из вот этой таблицы триад:
Пример:
101110102 = (010) (111) (010) = 2728
Перевод в шестнадцатеричную СС:
Алгоритм практически такой же:
- Разбиваем двоичное число на группы по 4 цифры справа налево (на тетрады);
- Если в самой левой группе (последней) не хватает цифр, доставляем вместо недостающих первых цифр нули (перед остальными цифрами);
- В каждой полученной группе умножаем каждый разряд на 2n, где n — номер разряда;
- Получившиеся результаты записываем в том же порядке, заменяя цифры после 9 на соответствующие буквы латинского алфавита — это и будет число в шестнадцатеричной СС.
Пример:
110102 = (0001) (1010) = (0*23 + 0*22 + 0*21 + 1*20) (1*23 + 0*22 + 1*21 + 0*20) = (0+0+0+1) (8+0+2+0) = (1) (10) = 1A16
Ну и для тех, у кого хорошая память (или учителя разрешают использовать дополнительные материалы) — таблица тетрад:
Пример:
1011111002 = (0001) (0111) (1100) = 17C16
Проверь себя
1. Количество символов, используемых для обозначения чисел в различных системах счисления, называется:
— алфавитом
— основанием
— мощностью
2. Римская система записи чисел является:
— унарной
— позиционной
— непозиционной
3. Чему равно число 10012 в десятичной системе счисления?
— 101
— 9
— 11