
1.5. Системы счисления и представление данных
В вопросах организации обработки информации с помощью ЭВМ важное место занимают системы счисления, формы представления данных и специальное кодирование чисел.
Совокупность приемов наименования и записи чисел называется счислением.
Под системой счисления понимается способ представления любого числа с помощью ограниченного алфавита символов, называемых цифрами. Счисление представляет собой частный случай кодирования, где слово, записанное с использованием определенного алфавита и по определенным правилам, называется кодом. Применительно к счислению это код числа.
В общем случае в такой позиционной системе счисления с основанием q любое число Х может быть представлено в виде полинома разложения:
Х(q)
=
xn-1qn-1+xn-2qn-2+…+
x1q1+x0q0+x-1q-1+…+x-mq-m
=
,
(1.1)
где Х(q) - запись числа в системе счисления с основанием q;
q основание системы счисления;
xi целые числа, меньше q;
n число разрядов (позиции) в целой части числа;
m число разрядов в дробной части числа.
Например:
4295, 6731(10) = 4· 103+2·102+ 9·101+5·100+6·10-1+7·10-2+1·10-4.
Для обозначения используемой системы счисления, её основание указывается в виде индекса в круглых скобках. Изображение числа Х(q) в виде последовательности коэффициентов х(i) полинома является его условной сокращенной записью (кодом):
X(q) = xn-1, xn-2,…, x1, x0, x-1, …, x-m. (1.2)
Запятая отделяет целую часть числа от дробной и служит началом отсчета значений веса каждой позиции (разряда).
В информатике применяют позиционные системы счисления с недесятичным основанием: двоичную, восьмеричную и шестнадцатеричную, т. е. системы счисления с основанием q = 2k, где k =1, 3, 4.
Наибольшее распространение получила двоичная система счисления. В этой системе для представления любого числа используются два символа - цифры 0 и 1. Основание системы счисления q = 2.
Произвольное число с помощью формулы (1.1) можно представить в виде разложения по степеням двойки:
X(2) = xn-12n-1+xn-22n-2+…+x121+…+x-m2-m.
Тогда условная сокращенная запись в соответствии с (1.2) означает изображение числа в двоичной системе счисления (двоичный код числа), где х = 0 или 1. Например:
13,625(10) = 1·23 + 1·22 +0·21 + 1·2-1 + 0·2-2 + 1·2-3 = 1101,101(2).
Двоичное представление числа требует примерно в 3,3 раза большего числа разрядов, чем его десятичное представление. Тем не менее, применение двоичной системы счисления создает большие удобства для работы ЭВМ, т. к. для представления в машине разряда двоичного числа может быть использован любой запоминающий элемент, имеющий два устойчивых состояния. В связи с этим возникает необходимость перевода числа из одной системы счисления в другую.
Преобразование числа Х из системы счисления с основанием р в систему счисления с основанием q (преобразование X(р) → Х(q)) осуществляется по правилу замещения или по правилу деления-умножения на основание системы счисления.
Правило замещения реализуется по формуле (1.1) и предусматривает выполнение арифметических операций с кодами чисел в новой системе счисления. Поэтому оно чаще всего используется для преобразования чисел из недесятичной системы счисления в десятичную.
Пример. Выполнить преобразование Х(2) → Х(10), если Х(2) = 10101, 011:
X(10) =12402312202112002112212321375
В ЭВМ применяются следующие формы представления данных:
• числа с фиксированной точкой (запятой);
• числа с плавающей точкой (запятой);
• десятичные числа;
• символьные данные.
При представлении числа Х в форме с фиксированной точкой указываются знак числа (signX) и модуль числа (modX) в q-ичном коде. Иногда такую форму представления чисел называют естественной формой. Место точки (запятой) постоянно для всех чисел и в процессе решения задач не меняется. Знак положительного числа кодируется цифрой "0", а знак отрицательного числа - цифрой "1".
Форма представления чисел с фиксированной точкой упрощает аппаратную реализацию ЭВМ, уменьшает время выполнения, машинных операций, однако при решении задач на машине необходимо постоянно следить за тем, чтобы все исходные данные, промежуточные и окончательные результаты находились в допустимом диапазоне представления. Если этого не соблюдать, то возможно переполнение разрядной сетки, и результат вычислений будет неверным.
От этих недостатков в значительной степени свободны ЭВМ, использующие форму представления чисел с плавающей точкой, или нормальную форму, в которой число представляется в виде произведения
Х = mqp,
где m мантисса числа;
q основание системы счисления (характеристика числа);
р порядок.
Целые числа кодируются двоичным кодом достаточно просто: достаточно взять целое число и делить его пополам до тех пор, пока частное не будет равно единице. Совокупность остатков от каждого деления, записанная справа налево вместе с последним частным, и образует двоичный аналог десятичного числа.
Пример:
19:2 = 9+1
9:2 = 4+1
4:2 = 2+0
2:2 = 1+0.
Таким образом, 19: 10011.
Для кодирования целых чисел от 0 до 255 достаточно иметь 8 разрядов двоичного кода (8 бит). Шестнадцать бит позволяют закодировать целые числа от 0 до 65535, а 24 бита – уже более 16,6 миллионов разных значений.
Чтобы кодировать действительные числа используют 80- рязрядное кодирование. При этом число предварительно преобразуется в нормализованную форму:
3,1415926= 0,31415926101
300 000= 0,3106
123 456 789 = 0,1234567891010.
Большую часть из 80 бит отводят для хранения мантиссы (вместе со знаком) и некоторое фиксированное количество разрядов отводят для хранения характеристики (тоже со знаком).
При кодировании текстовых данных возникают некоторые трудности. Рассмотрим их.
Если каждому символу алфавита сопоставить определенное целое число (например, порядковый номер), то с помощью двоичного кода можно кодировать и текстовую информацию, взяв восемь двоичных разрядов для кодирования 256 различных символов. Этого хватит, чтобы выразить различными комбинациями восьми битов все символы английского и русского языков, как строчные, так и прописные, а также знаки препинания, символы основных арифметических действий и некоторые общепринятые специальные символы.
Технически это выглядит очень просто, однако всегда существовали организационные сложности. В первые годы развития вычислительной техники они были связаны с отсутствием необходимых стандартов, а в настоящее время вызваны, наоборот, изобилием одновременно действующих и противоречивых стандартов. Для того чтобы весь мир одинаково кодировал текстовые данные, нужны единые таблицы кодирования, а это пока невозможно из-за противоречий между символами национальных алфавитов, а также противоречий корпоративного характера.
Институт стандартизации США (ANSI- American National Standard Institute) ввел систему кодирования ASCII (American Standard Code for Information Interchange стандартный код информационного обмена США) для английского языка. В системе ASCII закреплены две таблицы кодирования – базовая и расширенная. Базовая таблица закрепляет значения кодов от 0 до 127, а расширенная относится к символам с номерами от 128 до 255. Для представления каждого символа также отводится один байт. Следует подчеркнуть, что все виды представления символьной информации отличаются только кодировкой символов.
Первые 32 кода базовой таблицы, начиная с нулевого, отданы производителям аппаратных средств (в первую очередь производителям компьютеров и печатающих устройств). В этой области размещаются так называемые управляющие коды, которым не соответствуют никакие символы языков, и эти коды не выводятся ни на экран, ни на устройства печати, но ими можно управлять тем, как производится вывод прочих данных.
Начиная с кода 32 по код 127 размещены коды символов английского алфавита, знаков препинания, цифр, арифметических действий и некоторых вспомогательных символов.
Большое распространение в России для представления символьной информации в ЭВМ общего назначения получил двоичный код обработки информации — ДКОИ. В первой строке и в первом столбце таблицы указаны значения старшей и младшей тетрады байта.
В мини- и микро-ЭВМ для представления символьной информации часто применяется специальный код обмена информацией: КОИ-7 В том и другом случае для представления алфавитно-цифровой информации используется один байт. В КОИ-7 используется только 7 разрядов байта, что позволяет кодировать 27=128 символов. Левый разряд каждого байта в этом случае всегда равен 0.
Если проанализировать организационные трудности, связанные с созданием единой системы кодирования текстовых данных, то можно прийти к выводу, что они вызваны ограниченным набором кодов. В то же время, очевидно, что если, например, кодировать символы не восьмиразрядными двоичными числами, а числами с большим количеством разрядов, то и диапазон возможных значений кодов станет намного больше. Такая система, основанная на 16-ти разрядном кодировании символов, получила название универсальной – UNICODE. Шестнадцать разрядов позволяют обеспечить уникальные коды для 65 536 различных символов. Этого поля достаточно для размещения в одной таблице символов большинства языков планеты.
Несмотря на очевидность такого подхода, простой механический переход на данную систему долгое время сдерживался из-за недостаточных ресурсов средств вычислительной техники (в системе кодирования UNICODE все текстовые документы автоматически становятся вдвое длиннее). Во второй половине 90-х годов технические средства достигли необходимого уровня обеспеченности ресурсами, и сегодня мы наблюдаем постепенный перевод документов и программных средств на универсальную систему кодирования.