Формат представления данных в эвм. Представление данных в ЭВМ: двоичное кодирование информации

История развития ЭВМ

Первая IBM PC была аналитическая ЭВМ. Была спроектирована на механических узлах. Работала на языке Ада. Следующей машиной стала Mark 1. В качестве элементов памяти использовалось реле, поэтому у машины было низкое быстродействие (одно действие одновременно).

Mark 2. Работала на триггерах. (1946 год) Она выполняла сотню операций в секунду.

Первая отечественная машина была разработана Лебедевым. МЭСМ – малая электронная счётная машина. Позднее было выдумано Main Freim – универсальная машина для решения мирного круга задач.

Супер ЭВМ – самые дорогие и самые быстрые машины, которые работают в реальном времени.

Используется водяное или газовое охлаждение. Используется язык Assembler, на нём работает ядро процессора.

IBM 360-390 – построена также на языке Assembler. В ней была заложена идея современных микропроцессоров.

Процессор – устройство обработки информации. Состоит из множества микропроцессоров.

Микропроцессор – процессор в использовании СБИС (Сверхбольшой интегральной схемы).

Программа – последовательность команд, выполняемых в процессоре.

Команда – указание к выполнению определённого действия.

Первый микропроцессов был создан в 1970 году, он был 4-х разрядный. Назывался он MP 880.

Следующий процессор 88.36.

Основные характеристики микропроцессора:

1) Разрядность данных – определяет объём памяти, подключённых к процессору.

2) Тактовая частота – определяется внутренним быстродействием процессора, которое зависит также и от тактовой частоты шины системной платы.

3) Объем кеша памяти – устанавливается на подложке микропроцессора.

Бывает двухуровневая:

1) L1 – находится внутри основных схем ядра, которая всегда работает на максимальной частоте.

2) L2 – память второго уровня связана с ядром микропроцессора (внутренней шиной).

4) Состав инструкций – перечень, вид и тип команд, которые автоматически исполняются в микропроцессоре.

5) Рабочее напряжение питания (потребляемая мощность)

Конструктивные особенности

Стоимость

Закон фон-Неймана

Принципы:

1) Данные и команды передаются в двоичном коде

2) Программы выполняются линейно

3) Адрес последующей команды отличается от предыдущего на +1

4) Память для хранения данных – оперативная и внешняя связанная с пользователем с одной стороны и с ОС с другой стороны.

ПОСЛЕДОВАТЕЛЬНЫЙ И ПАРАЛЛЬЕЛЬНЫЙ КОД

При последовательном коде передача информации (n-разрядов) осуществляется последовательно, разряд за зарядом по одному проводнику. Время передачи данных пропорционально числу разрядов. T=t*n .

При параллельной передаче всех разрядов они передаются по n-проводникам. Время передачи равняется одному разряду, а оборудование равняется в N- раз.

T=t*n+t*n+…t*n

СТРУКТУРНЫЕ СХЕМЫ ЭВМ

В состав ЭВМ входит ряд устройств, которые могут соединятся между собой с помощью магистралей: адреса, данных и управления. Реально эти магистрали представляются в виде интерфейса(кабелей или шин). Существует несколько способов соединения устройств между собой.

Структура фон-Неймона- магистральный способ построения или с общей шины.

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

Память - предназначается для хранения исходных данных, промежуточных и конечных результатов.

Устройство Управления - предназначается для выборки всех управляющих сигналов поступающий на другие устройства ЭВМ, при обработке информации в соответствии с программами. УУ и АЛУ вместе составляют процессор- устройство обработки информации.

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

ОЗУ - принимает участие процессе обработки информации в АЛУ. В котором, выполняются действия на числами и командами.

ЭВМ - обрабатывает информацию в соответствии с программой.

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

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

Числа могут быть представлены в следующих разрядных сетках:

1) Полуслова – 2 байта

2) Слово – 4 байта или 32 разряда

3) Двойное слово – 8 байт или 64 разряда

4) Строка – число слов может достигать 2 32 то есть 4 гб

Упакованный формат

1) 2 одинарных слова

2) 2 двойных слова

Данные в современных ЭВМ представляются в разрядной сетке с физической точкой и с плавающей точкой.

Числа с фиксированной точкой числа обрабатываются целочисленным АЛУ. Фиксированная точка может фиксироваться в начале разряда и в конце.

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

Память

Предназначена для хранения данных и программ.

Основные характеристики:

1) Ёмкость памяти – количество бит байт слов, хранимых одновременно в ЭВМ.

Кило – 1024

Мега – 10 6

Гига – 10 9

Тера – 10 12

Пета – 10 15

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

3) Энергозависимость или энергонезависимость при хранении информации

1) Энергонезависимая память –ФЗУ

2) Энергозависимая память – оперативная, регистровая, кеш и т.д.

4) Время хранения информации

5) Стоимость хранения одного бита

Организация памяти

Является одним их основных параметров в ЭВМ. Имеет два значения.

1) Количество слов, умноженное на количество разрядов.

2) Память может быть одномерной, двумерной и трехмерной.

а) Одномерная память (D)- биты записываются последовательно друг за другом на носитель информации. Пример: магнитная лента.

б) Двумерная память - это матричная память где элементы расположены на пересечении шин Х и У.

в) Трехмерная память - это куб состоящий из матриц. Где число ячеек N располагаются на оси Z.

Современные ЗУ полупроводниковые, имеют организацию 3D располагаются в кристальных, интегральных микросхемах.

Для представления информации в памяти ЭВМ (как числовой, так и нечисловой) используется двоичный способ кодирования. Элементарная ячейка памяти ЭВМ имеет длину 8 бит (байт). Каждый байт имеет свой номер (его называют адресом). Наибольшую последовательность бит, которую ЭВМ может обрабатывать как единое целое, называют машинным словом. Длина машинного слова зависит от разрядности процессора и может быть равной 16, 32 битам и т.д. Для кодирования символов достаточно одного байта. При этом можно представить 256 символов (с десятичными кодами от 0 до 255). Набор символов персональных ЭВМ IBM PC чаще всего является расширением кода ASCII (American Standart Code for Information Interchange - стандартный американский код для обмена информацией). В некоторых случаях при представлении в памяти ЭВМ чисел используется смешанная двоично-десятичная «система счисления», где для хранения каждого десятичного знака нужен полубайт (4 бита) и десятичные цифры от 0 до 9 представляются соответствующими двоичными числами от 0000 до 1001. Например, упакованный десятичный формат, предназначенный для хранения целых чисел с 18 значащими цифрами и занимающий в памяти 10 байт (старший из которых знаковый), использует именно этот вариант. Другой способ представления целых чисел - дополнительный код. Диапазон значений величин зависит от количества бит памяти, отведенных для их хранения. Например, величины типа Integer (все названия типов данных здесь и ниже представлены в том виде, в каком они приняты в языке программирования Turbo Pascal, в других языках такие типы данных тоже есть, но могут иметь другие названия) лежат в диапазоне от -32768 (-2 15) до 32767 (2 15 - 1), и для их хранения отводится 2 байта; типа Longlnt - в диапазоне от -2 31 до 2 31 - 1 и размещаются в 4 байтах; типа Word - в диапазоне от 0 до 65535 (2 16 - 1) (используется 2 байта) и т.д. Как видно из примеров, данные могут быть интерпретированы как числа со знаками, так и без знаков. В случае представления величины со знаком самый левый (старший) разряд указывает на положительное число, если содержит нуль, и на отрицательное, если - единицу. Вообще разряды нумеруются справа налево, начиная с 0. Ниже показана нумерация бит в двухбайтовом машинном слове. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Дополнительный код положительного числа совпадает с его прямым кодом. Прямой код целого числа может быть получен следующим образом: число переводится в двоичную систему счисления, а затем его двоичную запись слева дополняют таким количеством незначащих нулей, сколько требует тип данных, к которому принадлежит число. Например, если число 37 (10) = 100101 (2) объявлено величиной типа Integer, то его прямым кодом будет 0000000000100101, а если величиной типа Longlnt, то его прямой код будет. Для более компактной записи чаще используют шестнадцатеричный код. Полученные коды можно переписать соответственно как 0025 (16) и 00000025 (16) . Дополнительный код целого отрицательного числа может быть получен по следующему алгоритму: 1) записать прямой код модуля числа; 2) инвертировать его (заменить единицы нулями, нули - единицами); 3) прибавить к инверсному коду единицу. Например, запишем дополнительный код числа (-37), интерпретируя его как величину типа Longlnt: 1) прямой код числа 37 есть; 2) инверсный код; 3) дополнительный код или FFFFFFDB (16) . При получении числа по его дополнительному коду прежде всего необходимо определить его знак. Если число окажется положительным, то просто перевести его код в десятичную систему счисления. В случае отрицательного числа необходимо выполнить следующий алгоритм: 1) вычесть из кода числа 1; 2) инвертировать код; 3) перевести в десятичную систему счисления. Полученное число записать со знаком минус. Примеры. Запишем числа, соответствующие дополнительным кодам: а) 0000000000010111. Поскольку в старшем разряде записан нуль, то результат будет положительным. Это код числа 23; б) 1111111111000000. Здесь записан код отрицательного числа. Исполняем алгоритм: 1) 1111I11111000000 (2) - 1 (2)= 1111111110111111 (2) ; 2) 0000000001000000; 3) 1000000 (2) = 64 (10) . Ответ: -64. Несколько иной способ применяется для представления в памяти персонального компьютера действительных чисел. Рассмотрим представление величин с плавающей точкой. Любое действительное число можно записать в стандартном виде М10 р, где 1

Персональный компьютер IBM PC позволяет работать со следующими действительными типами (диапазон значений указан по абсолютной величине): Покажем преобразование действительного числа для представления его в памяти ЭВМ на примере величины типа Double. Как видно из таблицы, величина это типа занимает в памяти 8 байт. На рисунке показано, как здесь представлены поля мантиссы и порядка: Можно заметить, что старший бит, отведенный под мантиссу, имеет номер 51, т.е. мантисса занимает младшие 52 бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна 1, здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка для упрощения вычислений и сравнения действительных чисел хранится в виде смещенного числа, т.е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению поряд- ка соответствовал нуль. Например, для типа Double порядок занимает 11 бит и имеет диапазон от 2~ 1023 до 2 1023 , поэтому смещение равно Ю23 (10) = 1111111111 (2) . Наконец, бит с номером 63 указывает на знак числа. Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ: 1) перевести модуль данного числа в двоичную систему счисления; 2) нормализовать двоичное число, т.е. записать в виде М-2 Р, где М- мантисса (ее целая часть равна 1 (2)) и р - порядок, записанный в десятичной системе счисления; 3) прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления; 4) учитывая знак заданного числа (0 - положительное; 1 - отрицательное), выписать его представление в памяти ЭВМ. Пример. Запишем код числа -312,3125. 1) Двоичная запись модуля этого числа имеет вид 100111000,0101. 2) Имеем 100111000,0101 = 1,001110000101 2 8 . 3) Получаем смещенный порядок 8 + 1023 = 1031. Далее имеем Ю31 (10) = = 10000000111 (2) . . 4) Окончательно

1) Прежде всего замечаем, что это код положительного числа, поскольку в разряде с номером 63 записан нуль. Получим порядок этого числа: 01111111110 (2) = 1022 (10) ; 1022 - 1023 = -1. 2) Число имеет вид 1,1100011-2“ 1 или 0,11100011. 3) Переводом в десятичную систему счисления получаем 0,88671875.

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

Счисления, положенная в основу всей была выбрана исторически. Ещё в эпоху создания первых ламповых компьютеров инженеры задумались, как можно произвести кодирование информации, чтобы цена всего аппарата оказалась минимальной. Поскольку у электронной лампы возможны два режима действия - пропускает ток, блокирует его, двойка в основе казалась наиболее рациональной. При переходе к полупроводниковым устройствам этот вывод можно было пересмотреть, но инженеры пошли по накатанному пути, сохранив двоичную логику всё более совершенствующимся вычислительным машинам. Тем не менее физика полупроводников допускает и троичное кодирование информации в компьютере: кроме отсутствия заряда (троичный нуль), возможно наличие как положительного (+1), так и отрицательного (-1), что и соответствует трём возможным значениям трита - элементарной ячейки памяти. То же самое можно сказать и об электрическом токе: прямое либо обратное направление или же отсутствие тока вообще (тоже три значения).

Выбор троичной автоматически решил бы проблему кодирования отрицательных чисел, которая в двоичной системе решается введением так называемого инвертирования с учётом первого бита как знакового. О премудростях этой операции для двоичной системы много написано как в интернете, так и в литературе по языку Assember. В случае же троичной логики число могло бы записываться, к примеру, таким образом: «+00-0+0+-». Здесь «+» - экономная запись значения «+1», «-» соответственно - «-1», ну а ноль говорит сам за себя. При переводе на человеческий язык получилось бы следующее: +3^8 + 0 + 0 - 3^5 + 0 + 3^3 + 0 + 3^1 - 3^0 = 6561 - 243 + 27 + 3 - 1 = 6347. Преимущества троичной логики проявились бы и при работе с самыми разнообразными данными: если на некий вопрос предполагается односложный ответ, то двоичный бит может нести в себе один их двух ответов («да» либо «нет»), тогда как троичный трит - уже из трёх («да», «нет», «не определено»). Опытные программисты помнят, как часто нужно хранить один ответ именно из трёх возможных, поэтому для неопределённого значения приходится что-то выдумывать, к примеру - вводить в систему дополнительный параметр (двоичный): была ли она полностью определена к текущему моменту времени.

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

С математической точки зрения троичный компьютер должен быть наиболее эффективным. Строгие выкладки достаточно сложны, но их результат сводится к следующему утверждению: эффективность вычислительной техники тем выше, чем ближе её родная система счисления к числу е (приблизительно равному 2,72). Легко видеть, что тройка к числу 2,72 значительно ближе, чем двойка. Остаётся надеяться лишь на то, что однажды инженеры, ответственные за выпуск электроники, обратят своё внимание на троичную систему счисления. Быть может, это и станет тем прорывом, после которого будет создан искусственный интеллект?

Форматы представления данных в памяти ЭВМ. Машинные коды.

План.

1. Форматы представления данных в памяти ЭВМ.

a. Представление чисел в форме с фиксированной точкой

b. Представление чисел в форме с плавающей точкой

2. Машинные коды: прямой, обратный, дополнительный.

Форматы представления данных в памяти ЭВМ.

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

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

– кодированное представление символа внешнего алфавита (при вводе и выводе данных);

– целым знаковым или беззнаковым числом (при внутреннем представлении чисел в памяти ЭВМ);

– частью команды или более сложной единицы данных и т.д.

В ЭВМ существуют следующие формы представления целых чисел: полуслово (байт), слово (два последовательных байта, пронумерованных слева направо от 0 до 15), двойное слово (4 байта).

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

В ЭВМ для представления чисел используется естественная (представление числа с фиксированной точкой) и полулогарифмическая (представление числа с плавающей точкой) формы.

Представление чисел в форме с фиксированной точкой.

В используемых представлениях чисел “запятая” или “десятичная точка” - это условный символ, предназначенный для разделения целой и дробной частей числа. Запятая имеет, следовательно, точный математический смысл, независимо от используемой системы счисления, и ее положение нисколько не меняет алгоритм вычислений или форму результата.

Если обрабатываемые числа имеют величину одного порядка, можно фиксировать позицию запятой или точки (такое представление называется представлением с фиксированной точкой). Тогда при обработке чисел в машине нет необходимости учитывать положение (представлять) десятичной точки. И тогда ее положение на уровне программы считается одинаковым и учитывается только в результате.

Существует в основном 2 способа фиксирования десятичной точки:

1) точка располагается справа от младшей цифры числа, и мы имеем целые числа;

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

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

Если же нужны и отрицательные числа, то знак числа может быть закодирован отдельным битом (обычно это старший бит). Старший разряд является знаковым, если он содержит 1 , то число отрицательное , если 0 , то число положительное .

При шестнадцатиразрядной сетке мы имеем:

В общем случае диапазон представления целых чисел равен (n – число разрядов в формате):

– для беззнаковых 0 ≤ x ≤ 2 n -1 (при n=8 от 0 до 255)

– для знаковых -2 n -1 ≤ x ≤ +2 n -1 -1 (при n=8 от -128 до 127);

Существенным недостатком такого способа представления является ограниченный диапазон представления величин, что приводит к переполнению разрядной сетки при выходе за допустимые границы и искажению результата, например, если рассмотреть пяти разрядную знаковую сетку, то при сложении двух чисел +22 и +13 получим:

Представление чисел в форме с плавающей точкой.

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

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

А = ± М·n ± p

где n - основание системы счисления;

M – мантисса;

р – целое число, называемое порядком (определяет местоположение десятичной точки в числе).

Такой способ записи чисел называется представлением числа с плавающей точкой .

Пример: -245,62=-0,24565·10 3 , 0,00123=0,123·10 -2 =1,23·10 -3 =12,3·10 -4

Очевидно, такое представление не однозначно.

Если мантисса заключена между n -1 и 1 (т.е. 1/n £ |M| <1), то представление числа становится однозначным, а такая форма назы­вается нормализованной .

Пример : для десятичной системы счисления - 0,1 < |m| < 1 (мантисса - число меньше 1, и первая цифра после запятой отлична от нуля, т.е. значащая).

Действительные числа в компьютерах различных типов записываются по-разному, тем не менее, существует несколько международных стандартных форматов, различающихся по точности, но имею­щих одинаковую структуру. Для основанного на стандарте IEEE – 754 (определяет представление чисел с одинарной точностью (float ) и с двойной точностью (double )) представление вещественного числа в ЭВМ используется m+p+1 бит, распределяемые следующим образом: один разряд (S)- используется для знака мантиссы, p – разрядов определяют порядок, m разрядов определяют абсолютную величину мантиссы. Для записи числа в формате с плавающей запятой одинарной точности требуется тридцатидвухбитовое слово. Для записи чисел с двойной точностью требуется шестидесятичетырёхбитовое слово.

1 p-1 0 m-1 0
S Порядок Дробная часть М

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

Смещение требуется, чтобы не вводить в число еще один знак. Смещённый порядок всегда положительное число. Для одинарной точности смещение принято равным 127, а для двойной точности – 1023 (2 p -1 -1) . В десятичной мантиссе после запятой могут присутствовать цифры 1:9, а в двоичной - только 1. Поэтому для хранения единицы после двоичной запятой не выделяется отдельный бит в числе с плавающей запятой. Единица подразумевается, как и двоичная запятая . Кроме того, в формате чисел с плавающей запятой принято, что мантисса всегда больше 1. То есть диапазон значений мантиссы лежит в диапазоне от 1 до 2.

Примеры :

1) Определить число с плавающей запятой, лежащее в четырёх соседних байтах:

11000001 01001000 00000000 00000000

Разделим двоичное представление на знак (1 бит), порядок (8 бит) и мантиссу (23 бита):

1 10000010 10010000000000000000000

– Знаковый бит, равный 1 показывает, что число отрицательное.

– Экспонента 10000010 в десятичном виде соответствует числу 130. Скорректируем порядок: вычтем число 127 из 130, получим число 3.

– К мантиссе добавим слева скрытую единицу 1 ,100 1000 0000 0000 0000 0000, перенесем порядок от скрытой единицы вправо на полученную величину порядка: 1 100, 1000 0000 0000 0000 0000.

– И, наконец, определим десятичное число: 1100,1 2 = 12,5 10

– Окончательно имеем -12,5

2) Определить число с плавающей запятой, лежащее в четырёх соседних байтах:

01000011 00110100 00000000 00000000

– Знаковый бит, равный 0 показывает, что число положительное.

– Экспонента 10000110 в десятичном виде соответствует числу 134. Вычтя число 127 из 134, получим число 7.

– Теперь запишем мантиссу: 1 ,011 0100 0000 0000 0000 0000

– И, наконец, определим десятичное число: 10110100 2 =180 10

Поскольку под мантиссу и порядок отводится определенное число разрядов, соответственно m и p , то можно оценить диапазон чисел, которые можно представить в нормализованном виде в системе счисления с основанием n .

Если m=23 и p=8 (4 байта), то диапазон представленных чисел от 1,5·10 -45 до 3,4·10 +38 (обеспечивает точность с 7-8 значащими цифрами).

Если m=52 и p=11 (8 байт), то диапазон представленных чисел от 5,0·10 -324 до 1,7·10 +308 (обеспечивает точность с 15-16 значащими цифрами).

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

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

Для представления информации в памяти ЭВМ (как числовой так и не числовой) используется двоичный способ кодирования.

Элементарная ячейка памяти ЭВМ имеет длину 8 бит (1 байт). Каждый байт имеет свой номер (его называют адресом). Наибольшую последовательность бит, которую ЭВМ может обрабатывать как единое целое, называют машинным словом. Длина машинного слова зависит от разрядности процессора и может быть равной 16, 32 битам и т.д.

Для кодирования символов достаточно одного байта. При этом можно представить 256 символов (с десятичными кодами от 0 до 255). Набор символов персональных компьютеров чаще всего является расширением кода ASCII (American Standart Code of Information Interchange - стандартный американский код для обмена информацией).

В некоторых случаях при представлении в памяти ЭВМ чисел используется смешанная двоично-десятичная система счисления, где для хранения каждого десятичного знак нужен полубайт (4 бита) и десятичные цифры от 0 до 9 представляются соответствующими двоичными числами от 0000 до 1001. Например, упакованный десятичный формат, предназначенный для хранения целых чисел с 18-ю значащими цифрами и занимающий в памяти 10 байт (старший из которых знаковый), использует именно этот вариант.

Другой способ представления целых чисел - дополнительный код . Диапазон значений величин зависит от количества бит памяти отведенных для их хранения. Например, величины типа Integer лежат в диапазоне от
-32768 (-2 15) до 32677 (2 15 -1) и для их хранения отводится 2 байта: типа LongInt - в диапазоне от -2 31 до 2 31 -1 и размещаются в 4 байтах: типа Word - в диапазоне от 0 до 65535 (2 16 -1) используется 2 байта и т.д.

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

Вообще, разряды нумеруются справа налево, начиная с нуля.

Дополнительный код положительного числа совпадает с его прямым кодом . Прямой код целого числа может быть представлен следующим образом: число переводиться в двоичную систему счисления, а затем его двоичную запись слева дополняют таким количеством незначащих нулей, сколько требует тип данных, к которому принадлежит число. Например, если число 37 (10) = 100101 (2) объявлено величиной типа Integer, то его прямым кодом будет 0000000000100101, а если величиной типа LongInt, то его прямой код будет. Для более компактной записи чаще используют шестнадцатеричный код. Полученные коды можно переписать соответственно как 0025 (16) и 00000025 (16) .

Дополнительный код целого отрицательного числа может быть получен по следующему алгоритму:

1. записать прямой код модуля числа;

2. инвертировать его (заменить единицы нулями, нули - единицами);

3. прибавить к инверсионному коду единицу.

Например, запишем дополнительный код числа -37, интерпретируя его как величину типа LongInt:

1. прямой код числа 37 есть1

2. инверсный код

3. дополнительный код или FFFFFFDB (16)

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

1. вычесть из кода 1;

2. инвертировать код;

3. перевести в десятичную систему счисления. Полученное число записать со знаком минус.

Примеры. Запишем числа, соответствующие дополнительным кодам:

a. 0000000000010111.

Поскольку в старшем разряде записан нуль, то результат будет положительным. Это код числа 23.

b. 1111111111000000.

Здесь записан код отрицательного числа, исполняем алгоритм:

1. 1111111111000000 (2) - 1 (2) = 1111111110111111 (2) ;

2. 0000000001000000;

3. 1000000 (2) = 64 (10)

Несколько иной способ применяется для представления в памяти персонального компьютера действительных чисел. Рассмотрим представление величин сплавающей точкой .

Любое действительное число можно записать в стандартном виде M*10 p , где 1 ≤ M < 10, р- целое число. Например, 120100000 = 1,201*10 8 . Поскольку каждая позиция десятичного числа отличается от соседней на степень числа 10, умножение на 10 эквивалентно сдвигу десятичной запятой на 1 позицию вправо. Аналогично деление на 10 сдвигает десятичную запятую на позицию влево. Поэтому приведенный выше пример можно продолжить: 120100000 = 1,201*10 8 = 0,1201*10 9 = 12,01*10 7 ... Десятичная запятая плавает в числе и больше не помечает абсолютное место между целой и дробной частями.

В приведённой выше записи М называют мантиссой числа, а р - его порядком . Для того чтобы сохранить максимальную точность, вычислительные машины почти всегда хранят мантиссу в нормализованном виде, что означает, что мантисса в данном случае есть число, лежащее между 1 (10) и 2 (10) (1 ≤ М < 2). Основные системы счисления здесь, как уже отмечалось выше,- 2. Способ хранения мантиссы с плавающей точкой подразумевает, что двоичная запятая находится на фиксированном месте. Фактически подразумевается, что двоичная запятая следует после первой двоичной цифры, т.е. нормализация мантиссы делает единичным первый бит, помещая тем самым значение между единицей и двойкой. Место, отводимое для числа с плавающей точкой, делится на два поля. Одно поле содержит знак и значение мантиссы, а другое содержит знак и значение порядка.



Персональный компьютер IBM PC с математическим сопроцессором 8087 позволяет работать со следующими действительными типами (диапазон значений указан по абсолютной величине):

Можно заметить, что старший бит, отведенный под мантиссу, имеет номер 51, т.е. мантисса занимает младшие 52 бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна единице, здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка храниться здесь не как целое число, представленное в дополнительном коде. Для упрощения вычислений и сравнения действительных чисел значение порядка в ЭВМ хранится в виде смещенного числа , т.е. к настоящему значению порядка, перед записью его в память, прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает 11 бит и имеет диапазон от 2 -1023 до 2 1023 , поэтому смещение равно 1023 (10) = 1111111111 (2) . Наконец, бит с номером 63 указывает на знак числа.

Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ:

1. перевести модуль данного числа в двоичную систему счисления;

2. нормализовать двоичное число, т.е. записать в виде М*2 p , где М - мантисса (ее целая часть равна 1 (2)) и р - порядок, записанный в десятичной системе счисления;

3. прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления;

4. учитывая знак заданного числа (0 - положительное; 1 - отрицательное), выписать его представление в памяти ЭВМ.

Пример. Запишем код числа -312,3125.

1. Двоичная запись модуля этого числа имеет вид 100111000,0101.

2. Имеем 100111000,0101 = 1,001110000101*2 8 .

3. Получаем смещенный порядок 8 + 1023 = 1031. Далее имеем 1031 (10) = 10000000111 (2) .