Лабораторная работа №1.2 Подробная справка (1). Компьютерное представление чисел
![]()
|
Компьютерное представление чисел Информация в памяти ЭВМ записывается в форме цифрового двоичного кода. С этой целью ЭВМ содержит большое количество ячеек памяти и регистров (от лат. regestum – внесенное, записанное) для хранения двоичной информации. Ячейка – это часть памяти, вмещающая в себя информацию, доступную для обработки отдельной командой процессора. Наибольшую последовательность бит, которую компьютер может обрабатывать как единое целое (содержимое ячейки памяти), называют машинным словом. Элементарная ячейка памяти ЭВМ имеет длину 8 бит (1 байт). Каждый байт имеет свой номер (его называют адресом). Длина машинного слова зависит от разрядности процессора и может быть равной 16, 32, 64 битам и т.д. Адрес машинного слова в памяти компьютера равен адресу младшего байта, входящего в это слово. Машинное слово, состоящее из 16 бит (2-х байт) представлено на рис.1. Разряды нумеруются справа налево, начиная с 0. Самый левый является старшим разрядом (на рисунке с номером 15), самый правый – младшим (на рисунке с номером 0).
Рис. 1. Бит, байт, слово В вычислительной технике используются два формата представления двоичных чисел: - с фиксированной запятой (точкой); - с плавающей запятой (точкой). Формат с фиксированной запятой применяется к целым числам, формат с плавающей запятой - к вещественным (действительным) числам. 1. Представление целых чисел в формате с фиксированной запятой Множество целых чисел, представимых в памяти ЭВМ, ограничено. Диапазон значений зависит от размера ячеек памяти, используемых для их хранения. Так в n-разрядной ячейке может храниться 2n различных значений целых чисел. Так в 8-разрядной ячейке может храниться 28=256 различных значений, в 16-разрядной – 216=65536 различных значений. Целые числа могут представляться в компьютере без знака и со знаком. Целые числа без знака. Обычно занимают в памяти компьютера один или два байта. Максимальное значение целого числа без знака (положительного числа) достигается в случае, когда во всех ячейках хранятся единицы. Для n-разрядного представления оно будет равно ![]() ![]() ![]() Так, число 111000012 будет храниться в 8-разрядной ячейке памяти следующим образом:
В 16-разрядном представлении число 200610=111110101102 будет храниться следующим образом:
Итак, чтобы получить внутреннее представление целого числа без знака А, хранящегося в n-разрядном машинном слове, необходимо: 1) перевести число А в двоичную систему счисления; 2) полученный результат дополнить слева незначащими нулями до n разрядов. Целые числа со знаком: прямой, обратный и дополнительный коды.Целые числа со знаком обычно занимают в памяти компьютера один, два или четыре байта. Для хранения целых чисел со знаком старший (левый) разряд в машинном слове отводится под знак числа (если число положительное, то в знаковый разряд записывается ноль, если число отрицательное – единица). Ровно половина из всех 2n чисел будут отрицательными; учитывая необходимость нулевого значения, положительных будет на единицу меньше. Максимальное положительное число (с учетом выделения одного разряда на знак) для целых чисел со знаком в n-разрядном представлении равно ![]() ![]() Диапазоны значений целых чисел со знаком: в 8-разрядной ячейке: от -128 до 127; в 16-разрядной ячейке: от -32 768 до 32 767; в 32-разрядной ячейке: от -2 147 483 648 до 2 147 483 647. Для представления отрицательного числа используется дополнительный код. Дополнительный код положительного числа совпадает с его прямым кодом. Прямой код целого положительного числа может быть получен следующим образом: число переводится в двоичную систему счисления, а затем его двоичную запись слева дополняют необходимым количеством нулей в соответствии с разрядностью машинного слова. Например, прямой код числа 3710=1001012 в 16-разрядной ячейке будет иметь вид 0000000000100101. Для записи внутреннего представления целого число со знаком (-А) необходимо: 1) модуль числа записать в прямом коде в n двоичных разрядах; 2) получить обратный код числа, для этого значения всех бит инвертировать – все единицы заменить на нули и все нули заменить на единицы); 3) к полученному обратному коду прибавить единицу. Получим дополнительный код целого числа со знаком. Например, внутреннее представление целого отрицательного числа -1607 в 16-разрядной ячейке запишется следующим образом: 1111 1001 1011 1001. Так как: 1) а) -1607=160710=110010001112 б) прямой код в 16-разрядной ячейке: 0000 0110 0100 0111 2) обратный код: 1111 1001 1011 1000 3) дополнительный код (результат прибавления 1): 1111 1001 1011 1001 – это внутренне двоичное представление числа (-1607). 3.2. Представление вещественных чисел в формате с плавающей запятой Числовые величины, которые могут принимать любые значения (целые и дробные) называются вещественными числами. В математике также используется термин «действительные числа». Решение большинства математических задач сводится к вычислениям с вещественными числами. Вещественные числа в памяти компьютера представляются в форме с плавающей точкой. Форма с плавающей точкой использует представление вещественного числа А в виде произведения мантиссы m на основание системы счисления q в некоторой целой степени p, которую называют порядком: А=m x qp Например, число 139,76 можно записать в виде: 0,13976х103. Здесь m=0,13976 – мантисса, p=3 – порядок. Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться десятичная в мантиссе. Отсюда название «плавающая точка». Однако справедливы и следующие равенства: 139,76=13,976х101 = 1,3976х102 = 0,013976х104 = 13976 х10-2 Получается, что представление числа в форме с плавающей точкой неоднозначно? Чтобы не было неоднозначности, в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в нормализованном представлении должна удовлетворять условию: 0.1q m< 1q , то есть мантисса меньше единицы и первая значащая цифра - не ноль. Следовательно, для рассмотренного числа нормализованным представлением будет: 0,13976х103. В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных. Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (q=2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:
1-й байт 2-й байт 3-й байт 4-й байт В старшем бите 1-го байта хранится знак числа. В этом разряде 0 обозначает плюс, 1 – минус. Оставшиеся 7 бит первого байта содержат машинный порядок. В следующих трех байтах хранятся значащие цифры мантиссы. Что такое машинный порядок? В семи двоичных разрядах помещаются двоичные числа в диапазоне от 0000000 до 1111111. В десятичной системе это соответствует диапазону от 0 до 127. Всего 128 значений. Знак порядка в ячейке не хранится. Но порядок, очевидно, может быть как положительным, так и отрицательным. Разумно эти 128 значений разделить поровну между положительными и отрицательными значениями порядка. В таком случае между машинным порядком и истинным (назовем его математическим) устанавливается следующее соответствие:
Если обозначить машинный порядок Мq, а математический q, то связь между ними выразится формулой: Мq = q + 64 Итак, машинный порядок смещен относительно математического на 64 единицы и имеет только положительные значения. Полученная формула записана в десятичной системе счисления. В двоичной системе счисления формула имеет вид: Мq = q + 10000002 При выполнении вычислений с плавающей точкой процессор это смещение учитывает. Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ: 1) Перевести модуль данного числа в двоичную систему счисления; 2) Записать полученное двоичное число в нормализованном виде; 3) Определить машинный порядок с учетом смещения; 4) Учитывая знак заданного числа (0 – положительное; 1 – отрицательное), записать его представление в памяти ЭВМ. Например, запишем внутреннее представление числа 139,76 в форме с плавающей точкой в 4-х байтовой ячейке: 1) Переведем десятичное 139,76 и запишем его 24-значащими цифрами: 139,7610 = 10001011,11000010100011112 2) Запишем полученное двоичное число в форме нормализованного двоичного числа с плавающей точкой: 10001011,11000010100011112 = 0,1000101111000010100011112 х101000, где 0,1000101111000010100011112 – мантисса; 10 – основание системы счисления (210=102); 1000 – порядок (810=10002). 3) Определим машинный порядок: Mq2 = 1000 + 1000000 = 1001000 4) Запишем представление числа в ячейке памяти:
Для того чтобы получить внутренне представление отрицательного числа -139,7610 достаточно в полученном выше представлении заменить в разряде знака числа 0 на 1. Никакого инвертирования, как для отрицательных целых чисел, здесь не происходит.
значения 1.000…2111… – зарезервированы стандартом IEEE (ANSI) для обозначения . значения +1.000…2000… – зарезервированы стандартом IEEE (ANSI) для обозначения 0. значения –1.000…2000… – зарезервированы стандартом IEEE (ANSI) для обозначения –0. значения +1.xxx…2111… – зарезервированы стандартом IEEE (ANSI) для обозначения NaN.
![]()
0 10000100 11111111000000000000000 ![]() Смещенный порядок – [100001002] = [13210], несмещенный порядок – [132-127] = [+5]. Число – [+1,1111 11112+5] = [+111111,1112] = [63,87510]. |