Системы счисления: различия между версиями
Содержимое удалено Содержимое добавлено
Igna (обсуждение | вклад) м Откат правок 90.150.218.69 (обс.) к версии JenVan |
|||
Строка 50:
Примером «чисто» '''непозиционной''' системы счисления является римская система.
== Позиционные системы счисления ==
=== Введение ===
Позиционные системы счисления — это системы счисления, в которых значение цифры напрямую зависит от её положения в числе.<br />
Например, число 01 обозначает единицу, 10 — десять.
Позиционные системы счисления позволяют легко производить арифметические расчёты.
Представление чисел с помощью арабских цифр — самая распространённая позиционная система счисления, она называется «десятичной системой счисления». Десятичной системой она называется потому, что использует десять цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9. Заметьте: максимальная цифра (9) на единичку меньше количества цифр (10).
Для составления машинных кодов удобно использовать не десятичную, а двоичную систему счисления, содержащую только две цифры, 0 и 1. Обратите внимание, что в двоичной системе максимальная цифра 1.
Программисты для вычислений также пользуются ещё восьмеричной и шестнадцатеричной системами счисления.
Количество цифр, используемых в системе счисления, называется её «основанием».
В десятичной системе основание равно десяти, в двоичной системе — двум, ну а в восьмеричной и шестнадцатеричной — соответственно, восьми и шестнадцати.
То есть в р-ичной системе счисления количество цифр равно р и используются цифры от 0 до р-1.
В общем случае в позиционной системе счисления числа представляются следующим образом: <math>a_{n-1} ...a_1a_{0f}</math>, где <math>a_0, a_1, ..., a_{n-1}</math> — цифры, а <math>f</math> — основание системы счисления. Если используется десятичная система, то <math>f</math> — можно опустить.
Примеры чисел:
* <math>25_{10}</math> — число в десятичной системе счисления, <math>a_0=5, a_1=2</math>;
* <math>31_8</math> — это же число в восьмеричной системе счисления, <math>a_0=1, a_1=3</math>;
* <math>221_3</math> — это же число в несимметричной [[w:Троичная система счисления|троичной системе счисления]], <math>a_0=1, a_1=2, a_2=2</math>;
* <math>11001_2</math> — это же число в двоичной системе счисления, <math>a_0=1, a_1=0, a_2=0, a_3=1, a_4=1</math>;
=== Зависимость плотности записи информации от основания системы счисления ===
Удельная натуральнологарифмическая плотность записи числа зависит от основания системы счисления х и выражается функцией y=ln(x)/x. Эта функция имеет максимум при x=e=2,718281828….
То есть система счисления с наибольшей плотностью записи имеет '''нецелочисленное''' основание.
Из '''целочисленных''' систем счисления наибольшей плотностью записи информации обладает троичная система счисления, то есть система с основанием равным трём.
Эту задачу решали ещё во времена Непера, в результате для уменьшения таблиц и числа вычислений перешли к таблицам натуральных логарифмов с основанием равным числу Эйлера е=2,718281828… .
=== Преобразование чисел ===
Такое представление чисел обозначает вот такое число: <math>a_{n-1} f^{n-1} + ... + a_1 f^1 + a_0 f^0</math>, где <math>a_0, a_1, ..., a_{n-1}</math> — цифры, а <math>f</math> — основание системы счисления.
Посмотрим чему равны числа из примеров. Используем только что приведённую формулу:
* <math>25_{10} \rightarrow 2 \cdot 10^1 + 5 \cdot 10^0 = 2 \cdot 10 + 5 \cdot 1 = 25_{10}</math>;
* <math>31_{8} \rightarrow 3 \cdot 8^1 + 1 \cdot 8^0 = 3 \cdot 8 + 1 \cdot 1 = 25_{10}</math>;
* <math>221_3 \rightarrow 2 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 2 \cdot 9 + 2 \cdot 3 + 1 \cdot 1 = 25_{10}</math>;
* <math>11001_2 \rightarrow 1 \cdot 2^4 + 1 \cdot 2^3 + 0 \cdot 2^2 + 0 \cdot 2^1 + 1 \cdot 2^0 = 1 \cdot 16 + 1 \cdot 8 + 0 \cdot 4 + 0 \cdot 2 + 1 \cdot 1 = 25_{10}</math>.
Мы разобрали, как узнать, чему равно число в любой системе счисления. Но как нам получить это число? Представим что у нас есть некоторое число <math>A</math>, и мы хотим получить его представление в системе по основанию <math>f</math>. Как нам это сделать?
Мы знаем, что число <math>A</math> можно представить в виде <math>a_{n-1} a_{n-2} ... a_{0f}</math>, будем из этого исходить. Что будет, если мы поделим это число на <math>f</math>. Получим
<center><math>{{a_{n-1} f^{n-1}+ ... a_2 f^2+a_1 f^1+a_0 f^0} \over f} = a_{n-1} f^{n-2}+ ... +a_2 f^1+a_1 f^0</math></center>
и остаток от деления <math>a_0</math>. Почему <math>a_0</math>? Все члены суммы делятся на <math>f</math> без остатка, а последний член <math>a_0</math> в результате деления даёт <math>0</math> и <math>a_0</math> в остатке, так как максимальное значение цифры всегда на единичку меньше основания системы. Итак мы получили самую правую цифру <math>a_0</math>, как остаток от деления, и число <math>a_{n-1} a_{n-2} ... a_{1f}</math>, как результат деления числа <math>A</math> на <math>f</math>. Если мы так будем продолжать делить, то получим все цифры <math>a_1, a_2 ... a_{n-1}</math>.
Возьмём для примера полюбившееся нам число <math>25</math> и получим представление этого числа в двоичной системе счисления:
* <math>25/2 = 12</math>, остаток <math>1</math>;
* <math>12/2 = 6</math>, остаток <math>0</math>;
* <math>6/2 = 3</math>, остаток <math>0</math>;
* <math>3/2 = 1</math>, остаток <math>1</math>;
* <math>1/2 = 0</math>, остаток <math>1</math>.
Что и следовало ожидать, получили: <math>11001_2</math>.
Представим число 25 в троичной системе счисления:
* <math>25/3 = 8</math>, остаток <math>1</math>;
* <math>8/3 = 2</math>, остаток <math>2</math>;
* <math>2/3 = 0</math>, остаток <math>2</math>.
Получили число: <math>221_3</math>.
Для закрепления наших знаний проделаем вычисления для восьмеричной и десятичной систем счисления.
Восьмеричная система счисления:
* <math>25/8 = 3</math>, остаток <math>1</math>;
* <math>3/8 = 0</math>, остаток <math>3</math>.
Результат: <math>31_8</math>.
Десятичная система счисления:
* <math>25/10 = 2</math>, остаток <math>5</math>;
* <math>2/10 = 0</math>, остаток <math>2</math>.
Результат: <math>25_{10}</math>.
Чтобы ещё лучше понять перевод в различные системы счислений, посмотрим, какие трансформации происходят внутри числа <math>4567_{10}</math>.
Представим это число в виде
<center><math>4 \cdot 10^3+5 \cdot 10^2+6 \cdot 10^1+7 \cdot 10^0=4 \cdot 1000+5 \cdot 100+6 \cdot 10+7</math>.</center>
Посмотрим, что у нас получится при последовательном делении на <math>10</math>:
* делим на <math>10</math>, получаем <math>4 \cdot 100+5 \cdot 10+6</math> и <math>7</math> в остатке;
* делим ещё раз на <math>10</math>, получаем <math>4 \cdot 10+5</math> и <math>6</math> в остатке;
* и ещё раз делим на <math>10</math>, получаем <math>4</math> и <math>5</math> в остатке;
* делим в последний раз на <math>10</math>, получаем <math>0</math> и <math>4</math> в остатке.
=== Шестидесятеричная система счисления ===
То, как мы представляем время на часах, это пример шестидесятеричной позиционной системы счисления. В представлении времени используется три позиции: для часов, минут и секунд; так как для каждой позиции приходится использовать 60 цифр, а у нас только десять цифр, то для каждой шестидесятиричной позиции используется две десятичные цифры (00, 01, 02, …, 59), а позиции разделяются двоеточием.
<center>h: m: s</center>
Чтобы получить время в секундах мы должны посчитать вот по такой формуле:
<center><math>h 60^2 + m 60^1 + s 60^0 = h 3600 + m 60 + s</math></center>.
Рассмотрим действия с шестидесятеричной системой на двух небольших задачках:
# Пирог нужно печь в духовке 45 минут, сколько это будет в секундах?
# Нужно испечь десять пирогов, сколько потребуется времени?
Чтобы производить вычисления в шестидесятеричной системе счисления нужно знать таблицу сложений и умножений шестидесятеричных чисел. Каждая таблица очень большая, она размером 60х60 ячеек, мы то обычную таблицу умножения еле запомнили, а уж выучить шестидесятиричную таблицу умножения нам врядли окажется по силам.
Чтобы решить эти задачи можно посчитать всё в десятичной системе, а потом результат перевести назад в шестидесятиричную систему.
Приступим. Чтобы перевести 45 минут в количество секунд, нужно просто, подставить числа в верхнюю формулу: h равняется нулю, m равняется 45 и s — нулю, получаем
<center><math>0 \cdot 3600 + 45 \cdot 60 + 0 = 2700</math></center>.
Ответ на первый вопрос: пирог нужно печь в духовке 2700 секунд.
Чтобы узнать сколько потребуется времени чтобы испечь десять пирогов нужно время готовки умножить на количество пирогов, то есть на десять. <math>2700 \cdot 10 = 27000</math>, но это время в секундах, а нам бы хотелось получить время в привычных нам часах, минутах и секундах, для этого воспользуемся стандартным способом перевода из одной системы счисления в другую, делением на основание системы счисления. Приступим:
* <math>27000/60 = 450</math> и <math>0</math> в остатке, записываем остаток в младший разряд хх: хх:00;
* <math>450/60 = 7</math> и <math>30</math> в остатке, записываем остаток в следующий разряд хх:30:00;
* <math>7/60 = 0</math> и <math>7</math> в остатке, записываем остаток в старший разряд 07:30:00.
Ответ на второй вопрос: чтобы испечь десять пирогов потребуется 7 часов 30 минут и 0 секунд.
== Двоичная система счисления ==
|