Представление чисел в ЭВМ

В ЭВМ применяются две формы представления чисел:

• естественная форма, или форма с фиксированной запятой(точкой) - ФЗ (ФТ);

• нормальная форма, или форма с плавающей запятой (точкой) - ПЗ (ПТ).

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

Например, пусть числа представлены в десятичной системе счисления и имеют пять разрядов в целой части числа (до запятой) и пять — в дробной части (после запятой). Числа, записанные в такую разрядную сетку, имеют вид:

+00721.35500;

+00000.00328;

-10301.20260.

Эта форма наиболее проста, естественна, но имеет небольшой диапазон представления чисел.

Диапазон значащих чисел N в системе счисления с основа­нием Р при наличии т разрядов в целой части и s разрядов в дробной части числа (без учета знака числа) будет таким:

P-s<N<Pm- Р-s

Например, при Р=2 , m= 10 и s = 6 числа изменяются в диапазоне 0,015 <N< 1024. Если в результате операции получится число, выходящее за допустимые пределы, произойдет переполнение разрядной сетки, и дальнейшие вычисления теряют смысл. В современных компьютерах естественная форма представления используется как вспомогательная и только для целых чисел.

В памяти ЭВМ числа с фиксированной точкой хранятся в трех форматах:

• полуслово — это обычно 16 бит или 2 байта;

• слово — 32 бита или 4 байта;

• двойное слово — 64 бита или 8 байтов.
Отрицательные числа с ФТ записываются в разрядную сетку в дополнительных кодах, которые образуются прибавлением единицы к младшему разряду обратного кода. Обратный код получается заменой единиц на нули, а нулей на единицы в прямом двоичном коде.

Плавающая запятая (точка). В форме представления с плавающей запятой (точкой) число изображается в виде двух групп цифр:

• мантисса;

• порядок.

При этом абсолютная величина мантиссы должна быть меньше 1, а порядок должен быть целым числом. В общем виде число в форме с плавающей запятой может быть представлено так:

N=±M x P±r,

где М — мантисса числа (|М| < 1);

r — порядок числа (целое число);

Р — основание системы счисления.

Например, приведенные ранее числа в нормальной форме запишутся следующим образом:

+0,721355 х 103;

+0,328 х 10-3;

-0,103012026 х 105.

Нормальная форма представления обеспечивает большой диапазон отображения чисел и является основной в современных компьютерах. Так, диапазон значащих чисел в системе счисления с основанием Р при наличии т разрядов у мантиссы и s разрядов у порядка (без учета знаковых разрядов порядка и мантиссы) будет:

Р х p-iP--\) <М<(\-Р~т

При Р=2 , m= 10 и s = 6 и = 22 и s= 10 диапазон чисел прости­рается примерно от 10-300 до 10300. Для сравнения отметим, что количество секунд, которые прошли с момента образования планет Солнечной системы, составляет около 1018.

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

Нормализованным называют такое число, в старшем разряде мантиссы которого стоит единица (следовательно, для нормализованных двоичных чисел 0,5 < \М\ < 1).

Нормализованные, т. е. приведенные к правильной дроби,; числа:

10,3510 = 0,103510 х 102;

0,000072458 = 0,72458 х 8-4;

F5C,9B16 = 0,F5C9B16xl63.

Алгебраическое представление двоичных чисел. Для алгебраического представления чисел, т. е. для их представления с учетом знака, в вычислительных машинах используются специальные коды:

• прямой;

• обратный

• дополнительный.

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

Знак числа обычно кодируется двоичной цифрой, при этом:

• код 0 означает знак + (плюс);

• код 1 означает знак - (минус). Прямой код числа N обозначим [Nлр]. Пусть N= а1, а2, а3, ..., аm, тогда:

. при N> 0 [N]np = 0, а1, а2, а3, ..., аm,

при N< 0 [Nnp = 1, а1, а2, а3, ..., аm,,

• при N = 0 имеет место неоднозначность [0]пр = 0, 0... = 1, 0...

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

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

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

Обратный код числа N обозначим [N]о6р.

Пусть N = а1, а2, а3, ..., аm, и а~ обозначает инверсию а, т. е. если а = 1, то а = 0, и наоборот. Тогда:

. при N> 0 [N]обр = 0, а1, а2, а3, ..., аm,

. при N< 0 [N]o6p = 1, а1~, а2, а3, ..., аm,

• при N=0 имеет место неоднозначность [0] o6p = 0,00...0 =

= 1,11…1

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

Например,

для N = 1011 [N]obp = 0,1011;

для N= —1011 [N] = 1,1011. [N]o6p = 1,0100.

Дополнительный код числа Nобозначим [N]доп.

Пусть, как и выше, N= а1, а2, а3, ..., аm и а обозначает вели­чину, обратную а (инверсию а), т. е. если а= 1, то а = 0, и наоборот. Тогда:

. при N> 0 [N]доп = 01, а2, а3, ..., аm

- при N< 0 [N]доп = 1, а1, а2, а3, ..., аm + 0.00...1.

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

Например,

дляN= 1011 [N]доп = 0,1011;

для N =-1100 [N]доп = 1,0100;

для N =-11010100 [N]доп = 1,00101100;

для N=-0000 [N]доп = 10,0000 = 0,0000 (1 исчезает). Неодно­значности в изображении 0 нет.