Представление чисел в ЭВМ
В цифровых ЭВМ числовая информация представляется в двух формах: - с фиксированной точкой (естественная форма); - с плавающей точкой (экспоненциальная форма). При представлении чисел с фиксированной точкой подразумевается, что положение точки, разделяющей число на целую и дробную части, неизменно для всех чисел. Эта форма наиболее проста, естественна, но имеет небольшой диапазон представления чисел и поэтому не всегда приемлема при вычислениях. В современных ЭВМ естественная форма используется, например, для представления целых чисел (дробная часть числа всегда отсутствует), денежных сумм (дробная часть всегда составляет четыре знака). Представление с плавающей точкой любого числа N в общем виде описывается следующей формулой: N = ± M × p±k,(3) где ±M – мантисса (дробная часть) числа; p – основание системы счисления; ±k – порядок (целое число), при этом положительный знак мантиссы и порядка может опускаться, а при указании порядка в десятичной системе принято использовать символ Е. Например, десятичное число с фиксированной точкой 123,45 может быть представлено в форме с плавающей точкой как 0,12345 × 103, или, как это принято, 1.2345Е+02. Такая форма представления имеет огромный диапазон отображения чисел и является основной в современных ЭВМ. Исходные данные в ЭВМ хранятся в виде двоичных чисел, то есть записываются в виде последовательности нулей и единиц. В памяти ЭВМ одна двоичная цифра записывается в один двоичный разряд, называемый битом. За единицу представления данных в цифровых ЭВМ принят байт – восемь бит, поэтому число разрядов ячеек памяти всегда кратно восьми, а данные имеют байтовую структуру, то есть состоят из определенного числа байтов. Более крупные единицы измерения данных образуются добавлением префиксов кило-, мега-, гига-, тера-: 1 килобайт (Кбайт) = 210 байт = 1024 байт 1 мегабайт (Мбайт) = 220 байт = 1024 Кбайт 1 гигабайт (Гбайт) = 230 байт = 1024 Мбайт 1 терабайт (Тбайт) = 240 байт = 1024 Гбайт Для представления положительных и отрицательных чисел в машинах используются специальные коды: прямой, обратный и дополнительный. Причем два последних позволяют заменить неудобную для ЭВМ операцию вычитания на операцию сложения с отрицательным числом; дополнительный код обеспечивает более быстрое выполнение операций при помощи сумматора, поэтому в ЭВМ применяется чаще именно он. Рассмотрим правила кодирования на примере целых чисел. Для перевода числа в прямой код знак числа опускается, а в старший (знаковый) разряд ставится 0, если число положительное, и 1 – если число отрицательное. Младшие разряды кода являются двоичным представлением модуля числа. Оставшиеся разряды кода заполняются нулями. Отметим, что перевод положительных чисел в прямой, обратный и дополнительный код не изменяет изображения этих чисел (таблица 3). Для перевода отрицательного числа в обратный код необходимо все, кроме знакового, разряды прямого кода проинвертировать (заменить нули на единицы, а единицы на нули). Для перевода отрицательного числа в дополнительный код необходимо к младшему разряду его обратного кода прибавить единицу. Перевод отрицательного числа из дополнительного кода в прямой осуществляется в обратной последовательности: сначала вычитается единица, затем инвертируются разряды. Напоминаем, что положительное число (0 в старшем разряде) обратному переводу не подвергается, поскольку имеет одинаковую запись как в прямом коде, так и в дополнительном. Таблица 3 – Примеры представления целых чисел в шестнадцатиразрядных двоичных кодах
При написании программ важно определить диапазоны значений и формы представления обрабатываемой информации. Например, в языках программирования семейства BASIC (Бейсик) типы переменных INTEGER и LONG используются, соответственно, для хранения целых чисел со знаком в шестнадцатиразрядном (два байта, или полуслово) и тридцатидвухразрядном (четыре байта, или машинное слово) дополнительном коде. Знак числа фиксируется в нулевом бите первого байта (крайний левый бит). Цифровая часть числа хранится в остальных битах поля числа, причем младший двоичный разряд числа находится в последнем, правом бите последнего байта. Переменные типа SINGLE и DOUBLE используются для хранения чисел с плавающей точкой в четырех или восьми байтах (двойное слово) соответственно. Знак хранится в нулевом бите, биты 1-7 отводятся под порядок числа, остальные биты используются для разрядов мантиссы. Как правило, мантисса хранится в нормальном виде, то есть первым ее разрядом не является 0.
|