Основы систем счисления
Время на прочтение
11 мин
Количество просмотров 502K
Изучая кодировки, я понял, что недостаточно хорошо понимаю системы счислений. Тем не менее, часто использовал 2-, 8-, 10-, 16-ю системы, переводил одну в другую, но делалось все на “автомате”. Прочитав множество публикаций, я был удивлен отсутствием единой, написанной простым языком, статьи по столь базовому материалу. Именно поэтому решил написать свою, в которой постарался доступно и по порядку изложить основы систем счисления.
Введение
Система счисления — это способ записи (представления) чисел.
Что под этим подразумевается? Например, вы видите перед собой несколько деревьев. Ваша задача — их посчитать. Для этого можно — загибать пальцы, делать зарубки на камне (одно дерево — один палецзарубка) или сопоставить 10 деревьям какой-нибудь предмет, например, камень, а единичному экземпляру — палочку и выкладывать их на землю по мере подсчета. В первом случае число представляется, как строка из загнутых пальцев или зарубок, во втором — композиция камней и палочек, где слева — камни, а справа — палочки
Системы счисления подразделяются на позиционные и непозиционные, а позиционные, в свою очередь, — на однородные и смешанные.
Непозиционная — самая древняя, в ней каждая цифра числа имеет величину, не зависящую от её позиции (разряда). То есть, если у вас 5 черточек — то число тоже равно 5, поскольку каждой черточке, независимо от её места в строке, соответствует всего 1 один предмет.
Позиционная система — значение каждой цифры зависит от её позиции (разряда) в числе. Например, привычная для нас 10-я система счисления — позиционная. Рассмотрим число 453. Цифра 4 обозначает количество сотен и соответствует числу 400, 5 — кол-во десяток и аналогично значению 50, а 3 — единиц и значению 3. Как видим — чем больше разряд — тем значение выше. Итоговое число можно представить, как сумму 400+50+3=453.
Однородная система — для всех разрядов (позиций) числа набор допустимых символов (цифр) одинаков. В качестве примера возьмем упоминавшуюся ранее 10-ю систему. При записи числа в однородной 10-й системе вы можете использовать в каждом разряде исключительно одну цифру от 0 до 9, таким образом, допускается число 450 (1-й разряд — 0, 2-й — 5, 3-й — 4), а 4F5 — нет, поскольку символ F не входит в набор цифр от 0 до 9.
Смешанная система — в каждом разряде (позиции) числа набор допустимых символов (цифр) может отличаться от наборов других разрядов. Яркий пример — система измерения времени. В разряде секунд и минут возможно 60 различных символов (от «00» до «59»), в разряде часов – 24 разных символа (от «00» до «23»), в разряде суток – 365 и т. д.
Непозиционные системы
Как только люди научились считать — возникла потребность записи чисел. В начале все было просто — зарубка или черточка на какой-нибудь поверхности соответствовала одному предмету, например, одному фрукту. Так появилась первая система счисления — единичная.
Единичная система счисления
Число в этой системе счисления представляет собой строку из черточек (палочек), количество которых равно значению данного числа. Таким образом, урожай из 100 фиников будет равен числу, состоящему из 100 черточек.
Но эта система обладает явными неудобствами — чем больше число — тем длиннее строка из палочек. Помимо этого, можно легко ошибиться при записи числа, добавив случайно лишнюю палочку или, наоборот, не дописав.
Для удобства, люди стали группировать палочки по 3, 5, 10 штук. При этом, каждой группе соответствовал определенный знак или предмет. Изначально для подсчета использовались пальцы рук, поэтому первые знаки появились для групп из 5 и 10 штук (единиц). Все это позволило создать более удобные системы записи чисел.
Древнеегипетская десятичная система
В Древнем Египте использовались специальные символы (цифры) для обозначения чисел 1, 10, 102, 103, 104, 105, 106, 107. Вот некоторые из них:
Почему она называется десятичной? Как писалось выше — люди стали группировать символы. В Египте — выбрали группировку по 10, оставив без изменений цифру “1”. В данном случае, число 10 называется основанием десятичной системы счисления, а каждый символ — представление числа 10 в какой-то степени.
Числа в древнеегипетской системе счисления записывались, как комбинация этих
символов, каждый из которых повторялся не более девяти раз. Итоговое значение равнялось сумме элементов числа. Стоит отметить, что такой способ получения значения свойственен каждой непозиционной системе счисления. Примером может служить число 345:
Вавилонская шестидесятеричная система
В отличии от египетской, в вавилонской системе использовалось всего 2 символа: “прямой” клин — для обозначения единиц и “лежачий” — для десятков. Чтобы определить значение числа необходимо изображение числа разбить на разряды справа налево. Новый разряд начинается с появления прямого клина после лежачего. В качестве примера возьмем число 32:
Число 60 и все его степени так же обозначаются прямым клином, что и “1”. Поэтому вавилонская система счисления получила название шестидесятеричной.
Все числа от 1 до 59 вавилоняне записывали в десятичной непозиционной системе, а большие значения — в позиционной с основанием 60. Число 92:
Запись числа была неоднозначной, поскольку не существовало цифры обозначающей ноль. Представление числа 92 могло обозначать не только 92=60+32, но и, например, 3632=3600+32. Для определения абсолютного значения числа был введен специальный символ для обозначения пропущенного шестидесятеричного разряда, что соответствует появлению цифры 0 в записи десятичного числа:
Теперь число 3632 следует записывать, как:
Шестидесятеричная вавилонская система — первая система счисления, частично основанная на позиционном принципе. Данная система счисления используется и сегодня, например, при определении времени — час состоит из 60 минут, а минута из 60 секунд.
Римская система
Римская система не сильно отличается от египетской. В ней для обозначения чисел 1, 5, 10, 50, 100, 500 и 1000 используются заглавные латинские буквы I, V, X, L, C, D и M соответственно. Число в римской системе счисления — это набор стоящих подряд цифр.
Методы определения значения числа:
- Значение числа равно сумме значений его цифр. Например, число 32 в римской системе счисления имеет вид XXXII=(X+X+X)+(I+I)=30+2=32
- Если слева от большей цифры стоит меньшая, то значение равно разности между большей и меньшей цифрами. При этом, левая цифра может быть меньше правой максимум на один порядок: так, перед L(50) и С(100) из «младших» может стоять только X(10), перед D(500) и M(1000) — только C(100), перед V(5) — только I(1); число 444 в рассматриваемой системе счисления будет записано в виде CDXLIV = (D-C)+(L-X)+(V-I) = 400+40+4=444.
- Значение равно сумме значений групп и цифр, не подходящих под 1 и 2 пункты.
Помимо цифирных, существуют и буквенные (алфавитные) системы счисления, вот некоторые из них:
1) Славянская
2) Греческая (ионийская)
Позиционные системы счисления
Как упоминалось выше — первые предпосылки к появлению позиционной системы возникли в древнем Вавилоне. В Индии система приняла форму позиционной десятичной нумерации с применением нуля, а у индусов эту систему чисел заимствовали арабы, от которых её переняли европейцы. По каким-то причинам, в Европе за этой системой закрепилось название “арабская”.
Десятичная система счисления
Это одна из самых распространенных систем счисления. Именно её мы используем, когда называем цену товара и произносим номер автобуса. В каждом разряде (позиции) может использоваться только одна цифра из диапазона от 0 до 9. Основанием системы является число 10.
Для примера возьмем число 503. Если бы это число было записано в непозиционной системе, то его значение равнялось 5+0+3 = 8. Но у нас — позиционная система и значит каждую цифру числа необходимо умножить на основание системы, в данном случае число “10”, возведенное в степень, равную номеру разряда. Получается, значение равно 5*102 + 0*101 + 3*100 = 500+0+3 = 503. Чтобы избежать путаницы при одновременной работе с несколькими системами счисления основание указывается в качестве нижнего индекса. Таким образом, 503 = 50310.
Помимо десятичной системы, отдельного внимания заслуживают 2-, 8-, 16-ая системы.
Двоичная система счисления
Эта система, в основном, используется в вычислительной технике. Почему не стали использовать привычную нам 10-ю? Первую вычислительную машину создал Блез Паскаль, использовавший в ней десятичную систему, которая оказалась неудобной в современных электронных машинах, поскольку требовалось производство устройств, способных работать в 10 состояниях, что увеличивало их цену и итоговые размеры машины. Этих недостатков лишены элементы, работающие в 2-ой системе. Тем не менее, рассматриваемая система была создана за долго до изобретения вычислительных машин и уходит “корнями” в цивилизацию Инков, где использовались кипу — сложные верёвочные сплетения и узелки.
Двоичная позиционная система счисления имеет основание 2 и использует для записи числа 2 символа (цифры): 0 и 1. В каждом разряде допустима только одна цифра — либо 0, либо 1.
Примером может служить число 101. Оно аналогично числу 5 в десятичной системе счисления. Для того, чтобы перевести из 2-й в 10-ю необходимо умножить каждую цифру двоичного числа на основание “2”, возведенное в степень, равную разряду. Таким образом, число 1012 = 1*22 + 0*21 + 1*20 = 4+0+1 = 510.
Хорошо, для машин 2-я система счисления удобнее, но мы ведь часто видим, используем на компьютере числа в 10-й системе. Как же тогда машина определяет какую цифру вводит пользователь? Как переводит число из одной системы в другую, ведь в её распоряжении всего 2 символа — 0 и 1?
Чтобы компьютер мог работать с двоичными числами (кодами), необходимо чтобы они где-то хранились. Для хранения каждой отдельной цифры применяется триггер, представляющий собой электронную схему. Он может находится в 2-х состояниях, одно из которых соответствует нулю, другое — единице. Для запоминания отдельного числа используется регистр — группа триггеров, число которых соответствует количеству разрядов в двоичном числе. А совокупность регистров — это оперативная память. Число, содержащееся в регистре — машинное слово. Арифметические и логические операции со словами осуществляет арифметико-логическое устройство (АЛУ). Для упрощения доступа к регистрам их нумеруют. Номер называется адресом регистра. Например, если необходимо сложить 2 числа — достаточно указать номера ячеек (регистров), в которых они находятся, а не сами числа. Адреса записываются в 8- и 16-ричной системах (о них будет рассказано ниже), поскольку переход от них к двоичной системе и обратно осуществляется достаточно просто. Для перевода из 2-й в 8-ю число необходимо разбить на группы по 3 разряда справа налево, а для перехода к 16-ой — по 4. Если в крайней левой группе цифр не достает разрядов, то они заполняются слева нулями, которые называются ведущими. В качестве примера возьмем число 1011002. В восьмеричной — это 101 100 = 548, а в шестнадцатеричной — 0010 1100 = 2С16. Отлично, но почему на экране мы видим десятичные числа и буквы? При нажатии на клавишу в компьютер передаётся определённая последовательность электрических импульсов, причём каждому символу соответствует своя последовательность электрических импульсов (нулей и единиц). Программа драйвер клавиатуры и экрана обращается к кодовой таблице символов (например, Unicode, позволяющая закодировать 65536 символов), определяет какому символу соответствует полученный код и отображает его на экране. Таким образом, тексты и числа хранятся в памяти компьютера в двоичном коде, а программным способом преобразуются в изображения на экране.
Восьмеричная система счисления
8-я система счисления, как и двоичная, часто применяется в цифровой технике. Имеет основание 8 и использует для записи числа цифры от 0 до 7.
Пример восьмеричного числа: 254. Для перевода в 10-ю систему необходимо каждый разряд исходного числа умножить на 8n, где n — это номер разряда. Получается, что 2548 = 2*82 + 5*81 + 4*80 = 128+40+4 = 17210.
Шестнадцатеричная система счисления
Шестнадцатеричная система широко используется в современных компьютерах, например при помощи неё указывается цвет: #FFFFFF — белый цвет. Рассматриваемая система имеет основание 16 и использует для записи числа: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B. C, D, E, F, где буквы равны 10, 11, 12, 13, 14, 15 соответственно.
В качестве примера возьмем число 4F516. Для перевода в восьмеричную систему — сначала преобразуем шестнадцатеричное число в двоичное, а затем, разбив на группы по 3 разряда, в восьмеричное. Чтобы преобразовать число в 2-е необходимо каждую цифру представить в виде 4-х разрядного двоичного числа. 4F516 = (100 1111 101)2. Но в 1 и 3 группах не достает разряда, поэтому заполним каждый ведущими нулями: 0100 1111 0101. Теперь необходимо разделить полученное число на группы по 3 цифры справа налево: 0100 1111 0101 = 010 011 110 101. Переведем каждую двоичную группу в восьмеричную систему, умножив каждый разряд на 2n, где n — номер разряда: (0*22+1*21+0*20) (0*22+1*21+1*20) (1*22+1*21+0*20) (1*22+0*21+1*20) = 23658.
Помимо рассмотренных позиционных систем счисления, существуют и другие, например:
1) Троичная
2) Четверичная
3) Двенадцатеричная
Позиционные системы подразделяются на однородные и смешанные.
Однородные позиционные системы счисления
Определение, данное в начале статьи, достаточно полно описывает однородные системы, поэтому уточнение — излишне.
Смешанные системы счисления
К уже приведенному определению можно добавить теорему: “если P=Qn (P,Q,n – целые положительные числа, при этом P и Q — основания), то запись любого числа в смешанной (P-Q)-ой системе счисления тождественно совпадает с записью этого же числа в системе счисления с основанием Q.”
Опираясь на теорему, можно сформулировать правила перевода из P-й в Q-ю системы и наоборот:
- Для перевода из Q-й в P-ю, необходимо число в Q-й системе, разбить на группы по n цифр, начиная с правой цифры, и каждую группу заменить одной цифрой в P-й системе.
- Для перевода из P-й в Q-ю, необходимо каждую цифру числа в P-й системе перевести в Q-ю и заполнить недостающие разряды ведущими нулями, за исключением левого, так, чтобы каждое число в системе с основанием Q состояло из n цифр.
Яркий пример — перевод из двоичной системы счисления в восьмеричную. Возьмем двоичное число 100111102, для перевода в восьмеричное — разобьем его справа налево на группы по 3 цифры: 010 011 110, теперь умножим каждый разряд на 2n, где n — номер разряда, 010 011 110 = (0*22+1*21+0*20) (0*22+1*21+1*20) (1*22+1*21+0*20) = 2368. Получается, что 100111102 = 2368. Для однозначности изображения двоично-восьмеричного числа его разбивают на тройки: 2368 = (10 011 110)2-8.
Смешанными системами счисления также являются, например:
1) Факториальная
2) Фибоначчиева
Перевод из одной системы счисления в другую
Иногда требуется преобразовать число из одной системы счисления в другую, поэтому рассмотрим способы перевода между различными системами.
Преобразование в десятичную систему счисления
Имеется число a1a2a3 в системе счисления с основанием b. Для перевода в 10-ю систему необходимо каждый разряд числа умножить на bn, где n — номер разряда. Таким образом, (a1a2a3)b = (a1*b2 + a2*b1 + a3*b0)10.
Пример: 1012 = 1*22 + 0*21 + 1*20 = 4+0+1 = 510
Преобразование из десятичной системы счисления в другие
Целая часть:
- Последовательно делим целую часть десятичного числа на основание системы, в которую переводим, пока десятичное число не станет равно нулю.
- Полученные при делении остатки являются цифрами искомого числа. Число в новой системе записывают, начиная с последнего остатка.
Дробная часть:
- Дробную часть десятичного числа умножаем на основание системы, в которую требуется перевести. Отделяем целую часть. Продолжаем умножать дробную часть на основание новой системы, пока она не станет равной 0.
- Число в новой системе составляют целые части результатов умножения в порядке, соответствующем их получению.
Пример: переведем 1510 в восьмеричную:
158 = 1, остаток 7
18 = 0, остаток 1
Записав все остатки снизу вверх, получаем итоговое число 17. Следовательно, 1510 = 178.
Преобразование из двоичной в восьмеричную и шестнадцатеричную системы
Для перевода в восьмеричную — разбиваем двоичное число на группы по 3 цифры справа налево, а недостающие крайние разряды заполняем ведущими нулями. Далее преобразуем каждую группу, умножая последовательно разряды на 2n, где n — номер разряда.
В качестве примера возьмем число 10012: 10012 = 001 001 = (0*22 + 0*21 + 1*20) (0*22 + 0*21 + 1*20) = (0+0+1) (0+0+1) = 118
Для перевода в шестнадцатеричную — разбиваем двоичное число на группы по 4 цифры справа налево, затем — аналогично преобразованию из 2-й в 8-ю.
Преобразование из восьмеричной и шестнадцатеричной систем в двоичную
Перевод из восьмеричной в двоичную — преобразуем каждый разряд восьмеричного числа в двоичное 3-х разрядное число делением на 2 (более подробно о делении см. выше пункт “Преобразование из десятичной системы счисления в другие”), недостающие крайние разряды заполним ведущими нулями.
Для примера рассмотрим число 458: 45 = (100) (101) = 1001012
Перевод из 16-ой в 2-ю — преобразуем каждый разряд шестнадцатеричного числа в двоичное 4-х разрядное число делением на 2, недостающие крайние разряды заполняем ведущими нулями.
Преобразование дробной части любой системы счисления в десятичную
Преобразование осуществляется также, как и для целых частей, за исключением того, что цифры числа умножаются на основание в степени “-n”, где n начинается от 1.
Пример: 101,0112 = (1*22 + 0*21 + 1*20), (0*2-1 + 1*2-2 + 1*2-3) = (5), (0 + 0,25 + 0,125) = 5,37510
Преобразование дробной части двоичной системы в 8- и 16-ую
Перевод дробной части осуществляется также, как и для целых частей числа, за тем лишь исключением, что разбивка на группы по 3 и 4 цифры идёт вправо от десятичной запятой, недостающие разряды дополняются нулями справа.
Пример: 1001,012 = 001 001, 010 = (0*22 + 0*21 + 1*20) (0*22 + 0*21 + 1*20), (0*22 + 1*21 + 0*20) = (0+0+1) (0+0+1), (0+2+0) = 11,28
Преобразование дробной части десятичной системы в любую другую
Для перевода дробной части числа в другие системы счисления нужно обратить целую часть в ноль и начать умножение получившегося числа на основание системы, в которую нужно перевести. Если в результате умножения будут снова появляться целые части, их нужно повторно обращать в ноль, предварительно запомнив (записав) значение получившейся целой части. Операция заканчивается, когда дробная часть полностью обратится в нуль.
Для примера переведем 10,62510 в двоичную систему:
0,625*2 = 1,25
0,250*2 = 0,5
0,5*2 = 1,0
Записав все остатки сверху вниз, получаем 10,62510 = (1010), (101) = 1010,1012
Добрый день, продолжаем тему максимально быстрых и эффективных способов решения заданий ЕГЭ по информатике с помощью программ на Python. В прошлый раз мы рассматривали, как очень быстро делать любые задания темы 2 (лог. выражения и таблицы истинности), ну а сегодня разберем удобный способ перевода чисел в различные системы счисления.
Этот способ подойдет для решения вообще всех задач ЕГЭ, где так или иначе встречается перевод чисел, в частности мы решим пару задач из раздела 14 (Кодирование чисел. Системы счисления. Прямое сложение в системах счисления).
Сразу приведем универсальное решение, работающее со всеми системами счисления на примере, а затем уже порешаем задачи, так что читайте до конца, чтоб окончательно, раз и навсегда разобраться и запомнить, как это делается быстро и удобно.
Допустим, нужно перевести число 123 в двоичную, восьмеричную, шестнадцатеричную и, например, еще и в 5-ричную системы счисления.
123(10) = ? (2)
123(10) = ? (8)
123(10) = ? (16)
123(10) = ? (5)
а затем сделать обратный перевод из этих систем в десятичную.
так вот, программа будет универсальной и почти одинаковой для всех этих случаев, но сначала двоичная
Двоичная система счисления
представьте себе, это все, мы получили ответ, который выводится в обратном порядке и в столбик, да, это несколько неудобно, но уже является правильным решением.
Если вам нужен только ответ, смысла дорабатывать программу нет, берем ответ в обратном порядке снизу вверх.
Ответ: 123(10) = 1111011(2)
Другие системы счисления
123(10) = ?(8)
123(10) = ?(16)
123(10) = ?(5)
А здесь даже и рассказывать нечего, потому что, как вы уже наверняка догадались, все то же самое только нужно заменить 2 на 8 или 16 или 5 (делим на основание системы, основание – это количество цифр, используемых в системе, например, двоичная – две цифры, восьмеричная – восемь, пятеричная – пять).
Восьмеричная
Ответ: 123(10) = 173(8)
Шестнадцатеричная
Здесь необходимо вспомнить, что двухразрядные числа (с двумя циферками) заменяются на буквы, 10 – А, 11 – В, 12 – С и так далее. Это используется во всех системах, основание которых больше 10, не только в шестнадцатеричной. Словом – видим двузначное число, заменяем буквой.
Ответ: 123(10) = 7B(16)
Пятеричная система
Ответ: 123(10) = 443(5)
И вот эти 4 строчки на Python уже можно использовать для решения задач, например:
Пример 1
Значение выражения 2 * 216^6 + 3 * 36^9 − 432 записали в системе счисления с основанием 6. Сколько цифр 5 содержится в этой записи?
Посчитаем количество цифр 5, их 14. Неудобно считать, правда? Давайте избавимся от ручного подсчета, но уже в примере 2
Пример 2
Сколько единиц содержится в двоичной записи значения выражения: 4^2020 + 2^2017 – 15?
Сейчас мы просто посчитали значение выражения и вывели, результат, число огромное (ну еще бы, посмотрите, в какие степени мы возводим!)
Тем не менее, без сомнений добавляем все тот же наш универсальный перевод (само число в десятичной выводить больше не нужно, закомментируем эту строку с print(n))
получили:
обратите внимание на прокрутку, посчитать вручную при таком количестве строк не получится. Что же делать? Вариантов 2:
- Организовать удобный вывод в строку и автоматический подсчет (мы пока не знаем как и насколько долго это делается)
- Оставить все как есть и направить вывод консоли в текстовый файл (одна строчка)
выбор за вами, я начну со второго способа
просто пишу в терминале python 1.py > out.txt
Важно!!! Мы должны находиться в рабочей папке нашей программы, у меня она называется 1.py и лежит в папке numeration. Перед началом работы в Python ВСЕГДА открывайте рабочую папку в редакторе кода (команда File -> Open Folder), а уж затем и файлы из нее. В редакторе VS Code при открытой папке полоса внизу редактора будет синей – это как раз и означает, что мы находимся в рабочей папке программы.
После выполнения команды в рабочей папке я получил файл out.txt с результатом работы программы, открою его в VS Code, нажму CTRL+F (поиск), введу единичку и сразу увижу ответ – 2015, готово!
Ответ: 2015
(попробуйте проделать то же самое с примером 1)
А что если ну очень хочется выводить красиво и считать автоматически?
вот эта программка все сделает как нужно:
ну и очевидно, она будет работать и для других задач – подставьте нужное основание m, нужное число (или выражение) n, замените в последних строках цифры, которые вам нужно подсчитать .
В заключение добавим, что существуют также функции, позволяющие в одну строку выполнить перевод в двоичную, восьмеричную и 16-ричную системы (но не другие!):
Обратите внимание на префиксы 0b, 0o и 0x в результате (префикс – начало строки или переменной, обычно указывающее ее тип, здесь “0b” – binary – двоичная, 0o – octal – восьмеричная, 0x – hexadecimal – шестнадцатеричная система).
Их можно убрать:
Конструкция [2:] в Python указывает (это называется “срез”), что первые два символа выводиться не будут, строка будет показана начиная с третьего символа.
Эти функции можно использовать, чтобы ускорить решение, но в случаях с другими системами (троичная, пятеричная и т.п.) все равно придется решать с помощью кода, рассмотренного выше.
Ну и наконец, обратный перевод:
Думаю, здесь все понятно и без слов, обязательно используйте кавычки, а также только те цифры, которые есть в вашей системе! Помните, что в восьмеричной системе нет восьмерки! (только 0-7), в шестнадцатеричной нет шестнадцати (0-15) и даже в нашей родной десятичной нет цифры десять – цифры 0-9, а “10” – это число, записанное с помощью цифр 0 и 1! В пятеричной нет 5 и так далее.
Префиксы использовать можно (если вдруг ранее ответ получился с префиксом, избавляться от него необязательно):
Скучное видео:
На этом закончим, хотите больше решений задач, или других тем, пишите в комментариях, подписывайтесь, будет много таких максимально быстрых способов решений ЕГЭ
Всего доброго!
На этой странице вы узнаете
- В каких случаях 10 не равно 10?
- Как купить шоколадку у инопланетянина?
Привычная нам система счисления называется десятичной, потому что нам с детства удобно считать 10 пальцев на руках. Но так было не всегда: раньше людям было удобнее считать до 12, по количеству фаланг на пальцах одной руки. Для них и для нас число 10 имеет совершенно разное значение.
Виды систем счисления
Система счисления — это модель, которая позволяет записывать числа по определенным правилам.
Основных типов систем счисления две:
- позиционные,
- непозиционные.
Непозиционные системы счисления основываются на том, что значение цифр никак не зависит от того, на какой позиции в числе они находятся.
Возьмем фермера и его овец. Какой способ записать количество овец — самый удобный? Самый простой пример — подсчет с помощью одной насечки. Тогда мы подсчитываем овец в своем стаде поштучно, обозначая при записи каждую отдельной засечкой.
Очевидно, что это неудобно. В наших интересах размножать овец. Но чем их больше, тем менее читаема такая запись. Когда мы добьемся невиданных высот в скотоводстве, и у нас станет 2796 голов, их подсчет с помощью одной засечки будет невозможен.
Римская система счисления — еще один известный пример непозиционной системы счисления. В ней уже появляются символы для обозначения отдельных чисел. Но в какой бы позиции символ ни стоял, он все еще значит только самого себя:
- I — 1;
- V — 5;
- X — 10 и так далее.
Римская система счисления упрощает запись чисел, но не решает проблему неудобства чтения полностью. Например, число 2796 в римской записи будет выглядеть как MMDCCXCVI. Уже неприятно.
В позиционных системах счисления значение цифры зависит от того, на какой позиции она стоит.
На примере нашей родной десятичной системы счисления, мы с вами понимаем, что в числе 1234:
- 1 — количество тысяч, и обозначает не 1, а 1000;
- 2 обозначает количество сотен и понимается как 200;
- 3 отвечает за количество десятков и означает 30;
- 4 стоит на самой последней позиции и означает количество единиц, поэтому в данном случае 4 — это 4.
Это сильно упрощает чтение чисел любого размера, так как меняется сам принцип их чтения:
- В непозиционной системе счисления (на примере римской): СХХIII = 100 + 10 + 10 + 1 + 1 + 1 = 123.
- В позиционной: 123 = 100 + 20 + 3.
Именно позиционную систему счисления выберет грамотный фермер, чтобы подсчитать количество овечек.
Основание позиционной системы счисления
Позиционная система счисления характеризуется ее основанием — количеством цифр, которые она использует для записи чисел.
- Десятичная система счисления (10сс) использует 10 цифр — от 0 до 9, с ней мы знакомы с детства.
- Компьютеру роднее двоичная система счисления (2сс), которая использует 2 цифры — 1 и 0.
- В двенадцатеричной системе счисления (12сс) помимо цифр 0–9 необходимы еще два символа. Для удобства заменим их буквами: A = 10, B = 11. Теперь имеем 12 символов от 0 до B.
- Также небезызвестная система счисления — шестнадцатеричная. Для нее кроме цифр 0–9 нужно еще больше символов, чтобы обозначить все цифры. Происходит это по аналогии — каждая новая буква отвечает за большее значение: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.
Мы используем числа тогда, когда кончаются цифры. Привычная нам система счисления называется десятичной, потому что использует 10 цифр — от 0 до 9. Для записи значений больше 9, мы начинаем строить числа из цифр. Первое такое число — 10.
Если бы мы использовали другое количество цифр, всё выглядело бы иначе. При использовании цифр от 0 до 6, нам пришлось бы строить числа уже для записи значений, больше 6. В таком случае 10 будет равно 7, но эти значения будут записаны в разных системах счисления.
Построение числа в непривычных нам системах счисления происходит точно так же, как и в 10сс:
- Увеличиваем значения единиц, используя доступные цифры.
- Как только цифры закончились, значение единиц обнуляется. Появляется новый разряд десятков, который также увеличивается от 1 до предела системы счисления.
- Когда любой разряд числа принимает значение максимальной цифры — разряд выше увеличивается на 1, а текущий разряд обнуляется.
Например:
- В 10сс число 88 будет увеличиваться так:
88 → 89 → 90 → 91 → 92 → … 99 → 100;
- В 2сс разряды будут появляться быстрее из-за маленького количества цифр:
1 → 10 → 11 → 100 → 101 → 110 → 111 → 1000;
- В 12сс чуть медленнее, так как цифр больше:
8 → 9 → A → B → 10 → 11 → … 18 → 19 → 1A → 1B → 20 → … 99 → 9A → 9B → A0 → A1 → … AA → AB → B0 → B1 → … BA → BB → 100.
Арифметика, как и построение числа, во всех системах счисления одинакова:
- Изменение разрядов происходит с единиц.
- При сложении избыток суммы увеличивает разряд выше (то самое “6 пишем, 1 в уме”).
- В вычитании при необходимости занимаем значение из старшего разряда, уменьшая его на 1.
Расширенная запись числа и перевод из Nсс в 10сс
Уметь переводить числа из 10сс в другие и обратно важно для того, чтобы торговать с инопланетянами.
Однажды мы, вероятно, достучимся до внеземных цивилизаций. Но у них может оказаться не 10 пальцев на руках, а 7, 12 или любое другое количество. Если их представления о математике шли путем, подобному нашему, какую систему счисления придумали они?
Когда мы захотим купить инопланетный сникерс за 2256 межгалактических юнитов, вполне может оказаться, что наши представления о числах сильно отличаются.
Подсчитав количество пальцев на руках продавца шоколадок, важно научиться переводить числа из одной системы счисления в другую.
Полная запись числа a1a2a3…ai, где ai — цифра числа под номером i, состоящей из k символов и с основанием системы счисления n, будет выглядеть как:
a1a2a3…ai…ak = a1 * nk — 1 + a2 * nk — 2 + … + ai * nk — i + … + ak * n0.
На примерах:
- 123 в 10сс расписывается как: 1 * 102 + 2 * 101 + 3 * 100;
- 1010 в 2сс: 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20;
- A9B в 12сс: 10 * 122 + 9 * 121 + 11 * 120.
Такой записи числа достаточно, чтобы перевести значение числа из любой системы счисления в 10сс — нужно посчитать значение составленной записи:
- 10102 = 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 = 8 + 0 +2 + 0 = 1010;
- 5259 = 5 * 92 + 2 * 91 + 5 * 90 = 5 * 81 + 2 * 9 + 5 * 1 = 42810;
- A9B12 = 10 * 122 + 9 * 121 + 11 * 120 = 10 * 144 + 9 * 12 + 11 * 1 = 155910.
Перевод из 10сс в Ncc
Принцип деления с остатком поможет переводить числа в другую сторону — из 10сс в любую другую систему счисления.
Алгоритм перевода следующий:
1. Делим исходное число на основание новой системы счисления.
2. Остаток от деления — новая найденная цифра числа.
3. Целую часть от деления снова делим на основание. Записываем остаток как новую цифру искомой записи, а целую часть от деления — как цель следующего деления. Снова делим целую часть на основание.
4. Деление происходит до тех пор, пока целая часть от деления не станет равна 0.
5. Полученные в качестве остатков от деления цифры нового числа читаются в обратном порядке.
Для примера давайте переведем число 2589 в 7сс:
- На первом шаге делим исходное число на 7, записывая остаток от деления как новую цифру и целую часть как оставшееся значение.
- На втором шаге делаем то же самое, но с целой частью предыдущего деления — теперь делим ее на 7.
- И так до тех пор, пока целая часть от деления не будет равна 0.
Интересующее нас значение находится в самом правом столбце и читается снизу вверх.
258910 = 103567
Перевод в системы счисления с основанием, больше 10, происходит так же. Просто надо не забывать, что цифры больше 9, будут обозначаться соответствующими буквами.
Например, таблица перевода десятичного числа 48406 в 16сс будет выглядеть следующим образом:
И искомое значение будет BD16.
Лайфхак или как быстрее закодировать геном
Представим, что нам нужно написать программу для биологов, которую они будут применять в исследованиях ДНК и нам надо реализовать хранение ДНК в памяти компьютера.
В ДНК встречается четыре вида азотистых оснований: аденин (A), гуанин (G), тимин (T) и цитозин (C). Всю ДНК можно записать как последовательность этих 4 символов. Но можно же записать тогда эту последовательность букв как число в 4сс, сопоставив цифры символам, например, код A – 0, C – 1, G – 2, T – 3. Тогда кусок ДНК GGT будет записан в 4сс как 223.
Но чтобы закодировать геном в компьютере, его надо перевести из 4сс в 2сс. Делать это делением может оказаться очень долго, ведь геном может быть очень длинным и делить его просто неэффективно. К счастью, есть выход!
Между 2сс и системами счисления, в основании которых стоит степень двойки (4сс, 8сс, 16сс), есть связь, которую можно использовать для быстрого перевода из 2сс в них и обратно. Для этого используется следующая таблица:
Алгоритм перевода состоит в следующем:
1. Вычисляется степень, в которую нужно возвести 2, чтобы получить основание необходимой системы счисления.
2. Используется количество столбцов таблицы, равное этой степени. Отсчет ведем с правого столбца.
3. При переводе из 2сс весь код разбивается на кодовые слова длиной, равной степени — при необходимости в начало записи добавляются нули. Отдельные кодовые слова подставляются в нижнюю строку таблицы. Цифра записи числа в новой системе счисления будет равна сумме цифр верхней строки, под которыми стоит 1 кодового слова.
4. При переводе в 2сс каждая цифра представляется как сумма цифр верхней строки таблицы. Цифрам, которые используются в сумме, соответствуют 1 кодового слова 2сс, а не использующимся — 0.
На примере:
- Для перевода между 2сс и 4сс используется часть таблицы:
- Перевод из 2сс в 4сс:
110001 = 11.00.01 = (2 + 1).(0 + 0).(0 + 1) = 3.0.1 = 301
- Перевод из 4сс в 2сс:
103 = 1.0.3 = (0 + 1).(0 + 0).(2 + 1) = 01.00.11 = 10011
- Для перевода между 2сс и 8сс используется часть таблицы:
- Перевод из 2сс в 8сс:
10101011100 = 010.101.011.100 = (0 + 2 + 0).(4 + 0 + 1).(0 + 2 + 1).(4 + 0 + 0) = 2.5.3.4 = 2534
- Перевод из 8сс в 2сс:
1753 = 1.7.5.3 = (0 + 0 + 1).(4 + 2 + 1).(4 + 0 + 1).(0 + 2 + 1) = 001.111.101.011 = 1111101011
- Для перевода между 2сс и 16сс используется вся таблица:
- Перевод из 2сс в 16сс:
101101111000001 = 0101.1011.1100.0001 = (0 + 4 + 0 + 1).(8 + 0 + 2 + 1).(8 + 4 + 0 + 0).(0 + 0 + 0 + 1) = 5.11.12.1 = 5BC1
- Перевод из 16сс в 2сс:
F87A = 15.8.7.10 = (8 + 4 + 2 + 1).(8 + 0 + 0 + 0).(0 + 4 + 2 + 1).(8 + 0 + 2 + 0) = 1111.1000.0111.1010 = 1111100001111010
Перевод между системами счисления на Python
Перевод больших чисел между системами счисления вручную неудобен и может занимать много времени. Иногда выгоднее было бы написать программу.
Перевод из 10сс в другие будем выполнять по описанному выше алгоритму. Пока исходное число больше 0, делим его на основание системы счисления. Записываем остаток от деления как новую цифру числа. Искомое число — остатки от деления, записанные в обратном порядке.
- Основным циклом программы будет while, который работает, пока исходное число больше 0.
- Новую цифру числа берем как остаток от деления исходного числа на основание новой системы счисления с помощью оператора %. Новые цифры будем записывать в новую строку, в которой и будет храниться искомая запись. Чтобы не переворачивать число в конце, можем сразу заносить каждую новую цифру не в конец, а в начало строки.
- Уменьшаем само число, деля его нацело на основание с помощью оператора //.
Например, перевод числа 258936 в 5сс.
number = 258936
n = 5
new_number = ""
while number > 0:
d = number % n
new_number = str(d) + new_number
number //= n
print(new_number)
_____________________________________________________________________
Вывод: 31241221
Перевод в 10сс из других систем счисления будем производить по описанной выше формуле:
a1a2a3…ai…ak = a1 * nk — 1 + a2 * nk — 2 + … + ai * nk — i + … + ak * n0.
- Главный цикл программы — for. Он будет перебирать цифры исходного числа, а точнее, их индексы, с помощью диапазона range по длине исходного числа.
- На каждом шаге цикла цифру ai числа будем умножать на основание системы счисления этого числа n в степени, равной разности длины числа k и порядкового номера текущей цифры i — ai*nk — i . Не забываем, что индексация строки начинается с 0, а не с 1, поэтому порядковый номер цифры — на 1 больше ее индекса.
Например, переведем число 31241221 из 5сс обратно в 10сс.
number = "31241221"
n = 5
new_number = 0
k = len(number)
for i in range(k):
new_number += int(number[i]) * n ** (k - i - 1)
print(new_number)
_____________________________________________________________________
Вывод: 258936
Лайфхаки по переводу между системами счисления программой:
- для перевода числа из 10сс в 2сс, 8сс и 16сс есть встроенные команды: bin, oct и hex соответственно
- bin(123) — “0b1111011”
- oct(123) — “0o173”
- hex(123) — “0x7b”
Важно заметить, что первые два символа в записи числа окажутся лишними в нашем случае — они будут обозначать идентификатор системы счисления, в которую мы перевели число.
Чтобы сразу от него избавиться, при переводе можно использовать срез, который будет учитывать все число без этого идентификатора:
- bin(123)[2:] — “1111011”
- oct(123)[2:] — “173”
- hex(123)[2:] — “7b”
- перевести число из любой системы счисления в 10сс можно с помощью команды int. Ей необходимо передать два параметра: исходное число в виде строки и основание его системы счисления:
- int(«31241221», 5) — 258936
- int(«7b», 16) — 123
Хорошо. А зачем всё это, если мы не генетики и не торгуем с инопланетянами?
Системы счисления — одно из базовых понятий информатики и оттого используются в большом количестве заданий на ЕГЭ. С применением различных систем счисления придется столкнуться при решении задачи 14, при построении большинства алгоритмов задачи 5, в заданиях на расчет объема информации в номере 7. Также, хотя это не упоминается в условиях заданий явно, в задаче 22 немалая часть алгоритмов связана с переводом числа из одной системы в другую.
Фактчек
- В позиционных системах счисления, в отличие от непозиционных, значение цифры зависит от ее положения в числе.
- Основание позиционной системы счисления определяет количество используемых в ней цифр для записи чисел.
- Для перевода из 10сс в любую другую: берем остаток от деления на основание новой системы счисления в качестве цифр нового числа и записываем их в обратном порядке.
- Для перевода из любой системы счисления в 10сс: умножаем каждую цифру числа на основание его системы счисления, возведенную в степень разности длины числа и порядкового номера данной цифры.
Проверь себя
Задание 1.
Какая цифра не может использоваться в 8сс?
- 0
- 3
- 7
- 8
Задание 2.
Для записи цифр 10-15 в 16сс используются …
- буквы A-F
- буквы А-Д
- буквы U-Z
- любые символы по договоренности
Задание 3.
Десятичное число 101 в 2сс будет выглядеть как…
- 101
- 101101
- 1100101
- 1010011
Задание 4.
Шестнадцатеричное число FBA000 в 10сс будет выглядеть как …
- 16490496
- 69409461
- 61400900
- Это некорректная запись числа в 16сс
Задание 5.
Что сделает запись на языке Python — int(“777”, 8)?
- Переведет число 777 из 10сс в 8сс
- Переведет число 8 из 10сс в 777сс
- Переведет число 777 из 8сс в 10сс
Ответы: 1. — 4; 2. — 1; 3. — 3; 4. — 1; 5. — 3.
Системы счисления
(Статья “Системы счисления. Методика преподавания темы на уроках в 8–11-х классах с углубленным изучением информатики для подготовки к ГИА” и презентация к ней – лауреаты конкурса презентаций к уроку, опубликованы на сайте “1 Сентября. Открытый урок” 15.10.2019г.) Есть вопросы – пишите !
Система счисления или нумерация – это способ записи (обозначения) чисел.
Возьмем это за основу работы с разными системами счисления, поскольку только способ записи у них будет разный, а все закономерности одинаковые. Поэтому в случае возникновения трудностей в понимании темы обращаемся к десятичной системе счисления и переносим аналог на остальные.
Символы, при помощи которых записываются числа, называются цифрами, а их совокупность – алфавитом системы счисления. Количество цифр, составляющих алфавит, называется основанием (размерностью) системы счисления.
Число в любой системе счисления состоит из цифр, входящих в алфавит этой системы, при этом цифра всегда занимает одну позицию числа.
Основание алфавита указывается в виде индекса числа, записанного в десятичной системе счисления, например: 10112, 1528, 1А716.
Индекс десятичной системы счисления обычно не указывается, так как она принята всеми к использованию по умолчанию.
Обратим внимание, что
- наименьшей цифрой в любой системе счисления является ноль, а наибольшая цифра всегда на единицу меньше основания.
В системе счисления, которой мы пользуемся в повседневной жизни – 10 цифр (от 0 до 9), и поэтому такая система счисления называется десятичной.
Аналогично, если в системе счисления будет две цифры (0 и 1), то она называется двоичной, восемь цифр (от 0 до 7) – восьмеричной и т.д.
Основание системы счисления обозначается индексом рядом с числом, например: 1028, 1012 и т.д. При этом основание десятичной системы счисления можно не указывать (будем использовать то, что всем нам привычно – “по умолчанию”).
Системы счисления бывают двух видов – позиционные и непозиционные.
Система счисления называется позиционной, если количественный эквивалент цифры зависит от ее разряда – позиции в записи числа.
Например, запишем одинаковыми цифрами несколько разных чисел:
1234 = 1 тысяча + 2 сотни + 3 десятка + 1 единица
3124 = 3 тысячи + 1 сотня + 2 десятка + 4 единицы
4321 = 4 тысячи + 3 сотни + 2 десятка +1 единица.
Как и в привычной нам десятичной, так и в любой другой позиционной системе счисления значение числа образуется суммой результатов умножения цифр на «веса» (степени основания) соответствующих разрядов.
Например,
3948 = 3*1000+9*100+4*10+8*1 = 3*103+9*102+4*101+8*100
10112 = 1*23+0*22+1*21+1*20 или 10112 = 1*20+1*21+0*22+1*23
(далее я буду пользоваться последней приведенной в примере формой записи, чтобы не делать лишних действий и не нумеровать степени двойки слева направо для их правильного использования).
При этом форма записи числа в виде 3948 называется свернутой, а в виде 3*103+9*102+4*101+8*100 – развернутой формой записи числа.
Примером непозиционных систем могут служить древнеегипетская, древнеславянская или римская система счисления.
Так в римской системе счисления из двух цифр X – десять и I – один можно составить числа: XI (одиннадцать), IX (девять), XIX (девятнадцать) или другие, но во всех них значения цифр в зависимости от занимаемых позиций не меняются, а значение числа получается разным при смене порядка следования цифр друг за другом.
Будем называть позиционные системы счисления дружественными (родственными), если в основании у них лежит одно и то же число, но в разных степенях. При этом «дружат» они через систему счисления с основанием в первой степени.
Например, двоичная, четверичная, восьмеричная и шестнадцатеричная системы счисления «дружат» через двоичную, т.к. в основании у них лежит число 2, но в разных степенях:
2=21, 4=22, 8=23, 16=24
Будем считать, что десятичная система счисления не дружит ни с какой другой, так как ближайшая к ней система счисления с основанием 102=100 в практических вычислениях нам не встречается.
Правила перевода между различными системами счисления делятся на две группы – между дружественными системами и недружественными.
Перевод между недружественными системами счисления всегда выполняется через десятичную систему следующим образом:
- из десятичной системы счисления в любую – делением исходного числа на основание системы счисления, в которую переводим; при этом остатки от деления и последнее частное должны быть меньше этого основания. Частное и остатки от деления собираются справа налево;
- из любой системы счисления в десятичную – умножением цифр на «веса» (степени основания) соответствующих разрядов и все полученные значения складываются.
Пример перевода десятичного числа 25 в двоичную систему счисления показан на рис.1.
Собрав частное с остатками справа налево, получаем:
2510 = 110012 и обратно 110012 = 1*20+0*21+0*22+1*23+1*24 = 25
Для быстрого и точного перевода между дружественными (и только между ними!) двоичной, восьмеричной и шестнадцатеричной системами счисления построим таблицу соответствия десятичных, восьмеричных и шестнадцатеричных чисел двоичным, которую мои ученики называют таблицей «дружбы» (рис.2). Левая часть этой таблицы включает цифры восьмеричной системы счисления, а правая дополняет ее для всех цифр шестнадцатеричной системы счисления. Заметим, что так как каждая цифра в любой системе счисления занимает только одну позицию (один разряд числа), то в шестнадцатеричной системе счисления для записи цифр со значением больше 9 (здесь11, 12, …, 15 – это цифры, занимающие при записи в числе две позиции вместо одной!) используют латинские заглавные буквы от A до F.
Данная таблица разделена двойными линиями в местах условного ее деления на дружественные системы счисления (двоичную, четверичную, восьмеричную и шестнадцатеричную).
При этом длина чисел в двоичной системе счисления зависит от степени двойки в основании дружественной системы счисления, т.е. для записи цифр двоичной системы счисления достаточно одного разряда (т.к. 2 = 21), четверичной – два (4 = 22), восьмеричной (8 = 23), а шестнадцатеричной – четыре (16=24).
Именно это позволяет легко осуществлять перевод между дружественными системами счисления, записывая каждую цифру восьмеричного числа соответствующей ему в таблице двоичной цифрой с учетом того, что длина двоичной цифры при этом строго соответствует степени двойки основания исходной системы счисления:
-
8=23, то меняем одну восьмеричную цифру на три двоичные – триады,
-
16 = 24, тогда меняем каждую шестнадцатеричную цифру на четыре двоичные – тетрады,
дополняя их при необходимости до нужной длины незначащими нулями слева (добавление нулей справа от исходного числа является результатом умножения числа на 10, 100 и т.д., т.е. изменяет исходное число).
Например, на рис.3 показан перевод чисел 1528 и 15216 в двоичную систему счисления с учетом этого правила.
При этом показано, что первые нули можно не указывать, т.к. они незначащие.
На рис.4 выполнен перевод из восьмеричной системы счисления в шестнадцатеричную и обратно через двоичную систему счисления.
Перегруппировка двоичных разрядов по четыре и по три во второй части выражений выполняется справа налево по количеству разрядов в степени результирующей системы счисления, а дальнейшая запись числа – как обычно, слева направо.
Теперь обратим внимание на несколько закономерностей, которые можно заметить в вышеприведенной таблице «дружбы» и аналогичных ей таблицах других систем счисления, в том числе и десятичной.
Закономерность 1.
- Любое основание N в своей системе счисления выглядит как 10, т.е.
N10 = 10N
(210=102 – посмотрите в таблице, 810=108, 1610=1016 и т.д.).
Закономерность 2.
- Степень любого основания N в своей системе счисления выглядит как единица и количество нулей, равных степени, т.е.
Nk = 10…0N
k
(посмотрите в таблице: 4=22=1002, 8=23 =10002, тогда 16=24=100002).
Закономерность 3.
- Число, стоящее перед k-той степенью основания, в своей системе счисления выглядит как последовательность из k самых больших цифр этой системы счисления, т.е.
Nk – 1 = (N-1)…(N-1)N
k
тогда 2k – 1 = 1…12
k
(посмотрите в таблице: 3=22-1=112, 7=23 -1=1112, тогда 15=24-1=11112).
Закономерность 4.
- Длина числа при переводе десятичного числа в любую систему счисления N легко определяется по формуле:
NL-1 ≤ Ch < NL
где Ch – исходное число,
N – основание системы счисления, куда переводим;
L – длина после перевода в систему счисления с основанием N
(например:
22 ≤ 5 < 23, тогда при переводе в двоичную систему счисления длина числа будет
равна 3, посмотрите в таблице: 5=1012;
23 ≤ 13 < 24, тогда при переводе в двоичную систему счисления длина числа будет
равна 4, посмотрите в таблице: 13=10112).
Если закономерности 1, 2 и 3 применяются для быстрого и точного перевода чисел между системами счисления, то закономерность 4 используется для первичной проверки правильности перевода чисел из одной системы счисления в любую другую, что позволяет сэкономить время на проверке результата перевода и дает возможность избежать ошибок.
Но использование закономерностей вместе со знанием таблиц степеней двойки и «дружбы» дает нам еще ряд преимуществ!
Так, помня о нашем принципе быстрых и точных вычислений и в соответствии с закономерностями 2 и 3, рекомендуется выполнять перевод из десятичной системы счисления в двоичную разложением числа на степени двойки следующим образом. Вычитаем из числа степень двойки, которая меньше числа, но максимально приближенную к нему, Затем с остатком проделываем те же действия до тех пор, пока не разложим все число.
Например: 25 = 16 + 8 + 1 = 24 + 23 + 20 (25 – 16 = 9 ; 9 = 8 + 1)
После этого, заменяем присутствующие степени двойки единицами (в соответствии с закономерностью 2), а пропущенные – нулями в порядке следования степеней, получая двоичную запись числа:
25 = 16 + 8 + 1 = 24 + 23 + 20 = 110012
(отсутствующие вторую и первую степени двойки заменяем нулями).
На чем еще можно сэкономить время и избежать ошибок?
Например, для перевода большого двоичного числа в десятичную систему счисления можно использовать в качестве промежуточной восьмеричную или шестнадцатеричную системы счисления, тогда математических операций при переводе будет меньше:
1100111012 = 110 011 1012 = 6358 = 5*80+3*81+6*82 = 5 + 24 + 384 = 413
или
1100111012 = 1 1001 11012 = 19D16 = 13*160+9*161+1*162 = 13 + 144 + 256 = 413
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ
Решим несколько задач из ОГЭ по этой теме с использованием изложенных выше закономерностей.
Примечание.Так как любое число в нулевой степени равно единице, то при решении задач можно не писать основание в нулевой степени в разряде единиц.
1. Переведите двоичное число 1110101 в десятичную систему счисления.
Решение: 11101012= 1 110 1012 = 1658 = 5+6*81+1*82 =5+48+64=117
Или: 11101012= 111 01012 = 7516 = 5+7*161=5+112=117
Ответ: 117
2. Переведите двоичное число 1100011 в десятичную систему счисления. В ответе укажите только число, основание системы счисления указывать не нужно.
Решение: 11000112= 110 00112 = 7316 = 3+6*161=3+96=99 ( 1+21+25+26= 3+32+64=99)
Ответ: 99
3. Переведите число 135 из десятичной системы счисления в двоичную систему счисления. Сколько единиц содержит полученное число? В ответе укажите одно число — количество единиц.
Решение: 135 = 128+4+2+1= 27 + 22 + 21 + 20
Никаких лишних действий! Этот ответ получен без окончательного перевода числа в двоичную систему счисления, достаточно посчитать количество двоек в степенях. Это позволило сэкономить время решения задачи и избежать возможных ошибок при дальнейшей записи.
Ответ: 4
4. Переведите число 125 из десятичной системы счисления в двоичную систему счисления. Сколько единиц содержит полученное число? В ответе укажите одно число —количество единиц.
Решение: 125 = 127 – 2 = 11111112 -102 = 11111012
Ответ: 6
5. Переведите число FE из шестнадцатеричной системы счисления в двоичную систему счисления. В ответе укажите только число, основание системы счисления указывать не нужно.
Решение: FE16 = 1111 11102 (используем запись тетрадами из таблицы «дружбы»).
Ответ: 11111110
6. Переведите число 143 из десятичной системы счисления в двоичную систему счисления. Сколько значащих нулей содержит полученное число? В ответе укажите одно число — количество нулей.
Решение: 143 = 128+8+4+2+1 = 27 + 23 + 22 + 21 + 20 , то пропущены всего три (6,5 и 4) степени двойки.
Ответ: 3
7. Переведите число 305 из десятичной системы счисления в двоичную систему счисления. Сколько единиц содержит полученное число? В ответе укажите одно число — количество единиц.
Решение: 305 = 256 + 32 + 16 + 1
(305-256=49, 49 – 32=17=16+1)
( т.к. в сложении участвуют всего 4 степени двойки, то результат будет содержать всего 4
единицы. Степени можно даже не писать)
Ответ: 4
С вопросами, замечаниями или предложениями по теме обращайтесь ко мне на сайте звездина.рус через форму обратной связи, в группе сайта Вконтакте или пишите на электронную почту v_zvezdina@mail.ru.
План урока:
Системы счисления – виды, особенности
Непозиционные системы счисления, их особенности
Основные позиционные системы счисления, правила перевода
Шестандцатеричная система счисления
Арифметические операции в двоичной системе
Сравнение систем
Таблицы истинности
Развиваясь, древний человек стал испытывать потребность в способах выражения количества. Подсчет убитых животных, количество врагов или соседей – причин становилось все больше. Сначала люди использовали только понятия «один», «много». После стали использовать понятие «пара», чтобы обозначить два предмета, это намного облегчило жизнь.
Постепенно перешли к использованию подручных средств – пальцев на руках и ногах, зарубок на коре дерева, кости животного или узелков на канате. Именно такие примитивные «счетные машины» позволили через тысячи лет узнать, что предки умели не просто считать, но даже умудрялись фиксировать результаты подсчета.
Кроме зарубок и узелков появилась потребность в символах, выражающих большее количество чего-либо, чем «один». Тогда были придуманы первые знаки для выражения больших значений. Так, египтяне, использовали знаки для цифр 1, 5, 10. Число 324 в их системе выглядело так:
А описание чисел при помощи специальных знаков и является системой счисления.
Системы счисления – виды, особенности
Система счисления (СС) – способ выражения чисел при помощи специальных правил и знаков, которые называются цифрами.
Источник
Все существующие системы делят на 2 группы:
- Позиционные системы счисления – такие, в которых, в зависимости от положения, цифры будет иметь разное значение. К этой группе относится арабская СС, в которой на первом месте справа цифра будет обозначать единицы, на втором – десятки, на третьем – сотни и так далее.
Чтобы выразить число 475, достаточно по порядку написать 3 символа, 475, выражая 5 единиц, 7 десятков и 4 сотни.
К этой группе также относятся СС с различными основаниями (2,8,16).
- Непозиционные СС – имеет значение именно знак, а не его положение. Единицы, десятки, сотни обозначаются определенными символами. Яркий представитель этой группы – римская СС.
Еще одна особенность – чтобы выразить число и не использовать сотни символов, применяется прибавление и вычитание. Написать 475 римскими знаками можно так CCCCXXXXXXXIIIII, но это нерационально. Если отнимать или прибавлять цифры, получится меньшее количество символов – CDLXXV. Цифра слева означает, что ее нужно отнять от большего числа, а справа – прибавить.
12 – XII
8 – VIII или IIX
Правильным считается тот вариант, при котором получается меньше символов.
Интересно. Первой позиционной СС была вавилонская и была она шестнадцатиричная! А в 19 веке использовали двенадцатеричную СС.
Алфавит СС – знаки, которые используются для обозначения цифр.
Основание – количество знаков, которыми кодируются числа. Еще оно показывает отличие между цифрами на разных позициях. Основание – целое число, начиная с 2.
Важно. Если в тексте идет речь о различных системах, то чтобы уточнить, какая используется основа, ставится подстрочный знак: 12548, 011001112. Примеры? Если же обозначения нет, по умолчанию это десятичная (12549).
Разряд – положение, позиция обозначения цифры в числе. Пример?
Непозиционные СС, их особенности
Первоначально древние люди ставили отметки (черточки-зарубки, точки), чтобы обозначить количество того или иного предмета. Отклики этого подхода все еще встречаются (полоски у военных, счетные палочки).
Постепенно от единиц они переходили к группам предметов по 3, 5, 10 единиц. Постепенно такие группы стали обозначаться определенными символами, что позволило сократить размер записи.
Источник
Римская СС
В ней определенным цифрам отвечают латинские буквы. Их сумма и будет числом.
Основные рекомендации при пользовании римскими цифрами:
- Символы следует писать по убыванию слева направо.
- Нежелательно записывать подряд более 3 одинаковых знаков.
- Положение цифры обозначает, какой ее вклад – отрицательный, если она стоит слева от большего числа, положительный – справа.
Таблица римских цифр
Недостаток этой СС в том, что для больших чисел недоступны операции сложения или другие, ещё она сложная и громоздкая. Зато римские цифры отлично вписались там, где нужна нумерация и эстетика: циферблаты, номера глав, списки, серии документов.
Основные позиционные СС, правила перевода
Двоичная система счисления
Систему, на которой основывается работа компьютеров, придумал гениальный немецкий ученый Г.В. Лейбниц (еще до 19 века!). Он придумал и описал СС, в которой все вычисления проводятся при помощи двух простейших символов – 0 и 1.
Компьютер, как механическое устройство, получает команды в виде двоичной кодировки. Он не в силах понять сложные задания, человеческую речь, музыку или тысячи оттенков, а переводя/кодируя всю необходимую информацию при помощи 0 и 1 (сеть, отсутствие сети), можно передать ему любые команды или информацию. Естественно, такие задания выглядят как огромные массивы двух знаков.
Алгоритм перевода чисел из десятичной в двоичную систему:
- Деление на основу СС до тех пор, пока не останется в остатке значение меньше значения основы.
- Записать остатки, от последнего к первому.
- Первый ноль можно не писать.
0111 0100 11002
Этот порядок действия позволят переводить в любую позиционную СС. В данном случае, основа – 2, остаток < или равен =.
Обратный алгоритм перевода из двоичной в десятичную систему счисления:
Записать число развернуто, то есть, сколько сотен, десятков и единиц в нем, но учитывая основу – 2
Объяснение. Развернутая форма записи 579: 5*102+7*101+9*100 = 57910.
Источник
Обычно мы пользуемся свернутой формой записи чисел, то есть без разбивки на разряды и умножения на основу.
- Умножить и суммировать полученные значения.
А чтобы было легче, пользуются готовой таблицей степеней 2.
Альтернативный способ преобразования для гуманитариев
Для начала нужно написать степени двойки, начиная с самой большой:
Далее нужно отнимать от числа максимальную степень двойки и напротив нее ставить 1, если есть в исходном варианте или 0, если его нет.
Перевод числа 579
Обратно еще проще. Подсчитать количество знаков – это будет степень 2 в степени -1. И так далее. А проще при помощи той же таблицы:
Если же оно на 1 больше, то число будет начинаться и заканчиваться на 1, а внутри – сплошные 0.
Восьмеричная СС
Основой такой системы является 8, а числа восьмеричной системы 0-7. Данная система счисления является позиционной и целочисленной. Применяется в сферах, связанных с цифровыми технологиями, особенно в Linux-программном обеспечении (права доступа, исполнения).
Пример: Перевести 5798 из десятичной в восьмеричную систему счисления:
Обратный перевод из восьмеричной СС в десятичную:
11038 = 1∙83+1∙82+0∙81+3∙80 = 512+64+0+3 = 57910
Таблица степеней
Альтернативный вариант таблицы степеней
Шестнадцатеричная СС
Это целочисленная система с основанием 16 (символы шестнадцатеричной системы счисления 0-9 и буквы A – F). Используется в реализации компьютерного программирования и документации на низком уровне, так как 8-битный байт, для записи которого удобно использовать 2 цифры из шестнадцатеричной системы.
Стандарт Юникод использует 4 и более символов 16-ой СС.
Для записи цвета из красного, зеленого и синего (R, G и B) также используют эту систему.
Алгоритм преобразования чисел в 16СС
Способ преобразования аналогичный предыдущим – расписывание числа как многочлена с учетом степеней 16. Для этого число делится на 16, в итоге – перечень остатков от деления, записанных наоборот.
В сети есть калькуляторы, способные выполнять преобразование чисел в различные СС и обратно (некоторые даже с детальным описанием процесса).
Арифметика для 2СС
Принципы выполнения простейших арифметических операций одинаковы для любых позиционных систем, независимо от основы:
Особенности арифметики СС с разными основами:
- при сложении чисел двух 1 в двоичной системе переполняется младший разряд (сумма = или ˃ основания СС), то единица переходит к большему разряду;
- если есть 0-1=1, идет заимствование из старшего разряда;
- умножать 2СС удобнее всего в столбик, учитывая 4 основные правила;
- заем единиц в 2СС при отнимании/делении, тогда она дает промежуточным разрядам по 1, а для занимаемого разряда сразу 11.
Примеры арифметических операций:
Для удобства разработаны готовые таблицы сложения в различных системах:
Сложение в 8-ой СС в 16СС
С их помощью можно быстро суммировать в различных СС.
Сложение для разных СС на примере 15 и 6:
Если необходимо сложить числа из разных систем, их приводят к одной основе. Самым простым вариантом будет перевод в десятичную систему, решение простого примера и перевод результата в любую из систем.
Рассмотрим сумму 438 и 5616. Результат можно выразить в любой СС, но проще привести к 8- или 16-ричной:
Переводим число 56 в восьмеричную через двоичную:
Умножение в 8-ой СС
в 16СС
Сравнение систем
СС могут быть с произвольной основой, но популярны 2,8,10,16-ые.
Сравнительная таблица разных систем счисления:
Перевод числа 75 в разные системы:
Источник
Правила перевода из двоичной, восьмеричной и шестнадцатеричной в 10СС:
Исходный вариант следует разделить на тройки цифр, с крайней справа. Если не хватает, старший разряд дополнить 0. Далее под каждой триадой ставится подходящий символ из 8‑ой системы.
Рассмотрим перевод на примере числа 579, которое соответствует 10010000112
001 001 000 011
Правила перевода из двоичной в шестнадцатеричную систему счисления:
Число разбивается по 4 знака, начиная справа (с меньшего разряда). Если не будет хватать символов у старшего разряда, тетраду дополняют нулями.
10010000112
0010 0100 0011
Сравнительный перевод дробей в СС
Чтобы перевести правильные дроби из 10-ой СС в другие позиционные, следует придерживаться правила, которое хорошо видно на примере перевода числа 0,35:
Удобно писать над каждой цифрой порядок, а дальше ее умножить на основу СС в степени разряда.
Перевод целых и дробей в 2СС, 8СС, 16СС:
Таблицы истинности
При помощи тех же нулей и единиц создаются таблицы истинности логических выражений, в которых описаны всевозможные варианты.
Основные логические операции
Например, конъюнкция является одной из логических операций. Она является истиной только в том случае, если два высказывания имеют истинные значения.
Логические переменные таблицы истинности обозначают p и q, а их значения выражают при помощи 0 и 1, где 0 – ложь, 1 – истина:
Фрагмент таблицы истинности для конъюнкции.
Так выражаются условия для всех логических операций.
Применяются таблицы истинности еще с начала 20 века в алгебре, логике, программировании.
При составлении урока был использован некоторый материал из сайта: https://studylib.ru/doc/6220932/sistemy-schisleniya