Материал предоставлен http://it.rfet.ru

Кодирование числовой информации

Числовая информация, как и любая другая, хранится и обрабатывается в компьютерах в двоичной системе счисления – числа представляются в виде последовательностей нулей и единиц.

Существуют два вида чисел и два способа их представления: форма с фиксированной точкой и форма с плавающей точкой. Форма с фиксированной точкой применяется для целых чисел, форма с плавающей точкой – для вещественных (действительных) чисел.

Действительные или вещественные числа - это рациональные и иррациональные числа, у которых может быть как целая, так и дробная часть, записываемая справа от разделителя целой и дробной части.

Как разделитель при работе на компьютере раньше всегда использовалась точка, но в современных системах разделитель – точка или запятая – может настраиваться в соответствии со стандартами страны пользователя или с его привычками.

ЭВМ оперирует с числами, содержащими конечное число двоичных цифр (разрядов). Количество разрядов ограничено длиной разрядной сетки машины. Под разрядной сеткой понимается совокупность двоичных разрядов, предназначенных для хранения и обработки машинных слов (двоичных кодов).

Количество двоичных разрядов и положение запятой в разрядной сетке машины определяют такие важные характеристики ЭВМ, как точность и диапазон представляемых чисел.

Кроме бита и байта, для указания длины формата чисел используется машинное слово, полуслово и двойное слово. Двойное слово и полуслово по-разному определяются для разных систем ЭВМ. Кроме того, может использоваться понятие тетрада – 4 двоичных разряда, которыми может кодироваться, например, одна двоичная цифра.

Двоичные разряды в форматах формируются слева направо (начиная с нулевого разряда).

Кодирование целых чисел

Целые числа в компьютере хранятся в памяти в формате с фиксированной запятой. В этом случае каждому разряду разрядной сетки соответствует всегда один и тот же разряд числа.

Целые числа без знака (положительные) – для их хранения может отводиться последовательность из 8, 16 или 32-х бит памяти. Например, максимальное 8-битное число %%A_2 = 11111111_2%% будет храниться следующим образом (прямой код):

11111111

Максимальное значение целого неотрицательного числа достигается в случае, когда во всех ячейках хранятся единицы и равно %%2^N-1%%, где %%N%% – разрядность числа.

Для 8-разрядных целых положительных чисел оно будет равно %%2^8-1 = 255%%, для 16-разрядных %%2^{16}- 1 = 65 535%%, для 32-разрядных %%2^{32}- 1 = 4 294 967 295%%.

Целые числа со знаком (могут быть положительные и отрицательные) – при их хранении используется последовательность из 8, 16 или 32-х бит памяти, причем старший бит (первый слева) обозначает знак числа – 0 положительное, 1 – отрицательное. При записи чисел используется не прямой, а дополнительный код двоичного числа равный %%2^N – A%%, где %%N%% – разрядность числа, %%A%% – прямой код двоичного числа.

Дополнительным называется код, в котором для положительного числа в знаковом разряде пишется “0”, в цифровых – модуль числа, а для отрицательного в знаковом разряде пишется “1”, в цифровых – дополнение числа до единицы (инвертирование цифр).

Например, число -1 в 8-разрядном двоичном коде выглядит, как 11111111, -2 – как 11111110 и т. д.

Дополнительный код позволяет заменить арифметическую операцию вычитания операцией сложения, что исключает операцию вычитания их набора команд двоичной арифметики процессора.

Таким образом, при использовании 8-ми разрядов для хранения целых чисел со знаком диапазон их изменения составит от – 128 до 127, если использовать 16 разрядов – от -32 768 до 32 767, 32 разряда – от -2 147 483 648 до 2 147 483 647, что следует учитывать при работе с целыми типами данных при программировании и работе с базами данных.

Кодирование вещественных чисел

Для того чтобы представить действительное число X в виде набора целых чисел (двоичных – для представления в компьютерной памяти), его необходимо привести к нормализованной форме:

$$X = \pm M · N^P;$$

где %%M%% – мантисса (дробная часть), %%N%% – основание системы счисления, а %%P%% – порядок числа.

Для десятичной системы счисления нормальная форма %%X = \pm M · 10^P%%, для двоичной %%X = \pm M · 2^P%%.

Например, число %%22.22_{10}%% в таком виде будет выглядеть, как %%+0,2222·10^2%% (при записи чисел в памяти ЭВМ ноль и запятая отсутствуют).

Таким образом, действительные число на компьютерах хранится в двоичной системе счисления в виде:

SP      M             

где S – признак знака числа.

Поскольку размер памяти, отводимый под мантиссу и порядок, ограничен, то действительные числа представляются с некоторой погрешностью, определяемой количеством разрядов в мантиссе числа, и имеют определенный диапазон изменения, определяемый количеством разрядов в порядке числа.

Конкретные характеристики различных типов вещественных типов данных для ПК определены в стандарте IEEE-754-1985 (Institute of Electrical and Electronic Engineers), согласно которому используются 3 основных формы (см. табл. 1.3).

Особенности арифметики для чисел с плавающей точкой могут существенно влиять на результаты расчётов, вплоть до того, что погрешность может сделать невозможным получение какого-либо результата вообще, поэтому знание деталей представления в памяти таких чисел и реализации арифметики вещественных чисел является необходимым для программистов.

Таблица 1.3. Данные с плавающей точкой по стандарту IEEE-754-1985

ТипРазмер, битДиапазон изменения чисел (максимум,минимум)Точность, количество цифр в числе  Машинное %%\varepsilon%%
single32%%3.4·10^{-38}%% — %%3.4·10^{38}%%6%%1,192·10^{-7}%%
double64%%1.7·10^{-308}%%—%%1.7·10^{308}%%15%%2,221·10^{-16}%%
long double80%%3.4·10^{-4932}%%—%%3.4·10^{4932}%%19%%1,084·10^{-19}%%
Кодирование текстовой информацииКодирование изображений