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

Числа в памяти компьютера

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

Целые отрицательные числа.

Разберемся, как представляются отрицательные числа. Казалось бы, для этого достаточно заменить 0 на 1 в старшем (31-м) разряде ячейки памяти. Однако реально это делается несколько сложнее. Для представления отрицательных целых чисел используется дополнительный код.

Дополнительным кодом двоичного числа X в N-разрядной ячейке является число, дополняющее его до значения 2.

    Получить дополнительный код можно следующим путем:
  1. записать внутреннее представление положительного числа X;
  2. записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;
  3. к полученному числу прибавить 1.
    Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
  1. 0000000000000000000101011111110

  2. 11111111111111111110101000000011

  3. 11111111111111111110101000000100

Шестнадцатеричная форма результата:

FF FF ЕА 04.

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

Почему отрицательные числа представляются в дополнительном коде? Дело в том, что в этом случае операция вычитания двух чисел сводится к сложению с дополнительным кодом вычитаемого, и процессору достаточно уметь лишь складывать числа. В самом деле:

А - В = А + (-В).

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

Проверим, действительно ли в ячейке памяти получится О в результате сложения числа 5628 с числом -5628 в форме дополнительного кода.

00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 =

1 00000000 00000000 00000000 00000000

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

Двоичное 32-разрядное число 231 является «отрицательным самому себе». Получим его дополнительный код:

    Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
  1. 10000000000000000000000000000000

  2. 01111111111111111111111111111111

  3. 10000000000000000000000000000000

Полученный код используется для представления значения

-231 = -2147483648.

Следовательно, диапазон представления целых чисел в 32-разрядном машинном слове:

-231 <= Х <= 231-1,

или

-2147483648 <= Х <= 2147483647.

В общем случае для N-разрядного машинного слова этот диапазон такой:

-2N-1 <= X <= 2N-1-1.

В современных компьютерах часто используется 16- разрядное представление целых чисел. В этом случае их диапазон следующий:

-215 <= Х <= 215-1,

или

-32768 <= Х <= 32767.

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

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

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

Форма с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления р в некоторой целой степени n, которую называют порядком:

R = m * рn

Например, число 25,324 можно записать в таком виде: 0.25324х102. Здесь m=0.25324 — мантисса, n=2 — порядок. Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться десятичная точка в мантиссе. Отсюда название «плавающая точка».

Однако справедливы и следующие равенства:

25,324 = 2,5324*101 = 0,0025324*104 = 2532,4*102 и т.п.

Получается, что представление числа в форме с плавающей точкой неоднозначно? Чтобы не было неоднозначности, в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в нормализован-ном представлении должна удовлетворять условию:

0,1p <= m < 1p.

Иначе говоря, мантисса меньше единицы и первая значащая цифра — не ноль. Значит для рассмотренного числа нормализованным представлением будет: 0.25324 * 102. В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных. Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (р=2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:

± машинный порядок        М А Н Т И С С А     

     1-й байт                    2-й байт    3-й байт   4-й байт  

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

Что такое машинный порядок? В семи двоичных разрядах помещаются двоичные числа в диапазоне от 0000000 до 1111111. В десятичной системе это соответствует диапазону от 0 до 127. Всего 128 значений. Знак порядка в ячейке не хранится. Но порядок, очевидно, может быть как положительным так и отрицательным. Разумно эти 128 значений разделить поровну между положительными и отрицательными значениями порядка. В таком случае между машинным порядком и истинным (назовем его математическим) устанавливается следующее соответствие:

Машинный порядок 0 1 2 3 ... 64 65 ... 125 126 127
Математический порядок -64 -63 -62 -61 ... 0 1 ... 61 62 63

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

Мр = р + 64.

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

Полученная формула записана в десятичной системе. Поскольку 6410=4016 (проверьте!), то в шестнадцатеричной системе формула примет вид:

Мр16 = р16 + 4016

И, наконец, в двоичной системе:

Мр2 = р2+100 00002

    Теперь мы можем записать внутреннее представление числа 25,324 в форме с плавающей точкой.
  1. Переведем его в двоичную систему счисления с 24 значащими цифрами.
    25,32410= 11001,01010010111100011012
  2. Запишем в форме нормализованного двоичного числа с плавающей точкой:
    0,110010101001011110001101*10101
    Здесь мантисса, основание системы счисления (210=102) и порядок (510=1012)записаны в двоичной системе.
  3. Вычислим машинный порядок.
    Мр2 = 101 + 100 0000 = 100 0101
  4. Запишем представление числа в ячейке памяти.
    01000101110010101001011110001101

Это и есть искомый результат. Его можно переписать в более компактной шестнадцатеричной форме:

45CA978D

Для того, чтобы получить внутреннее представление отрицательного числа -25,324,достаточно в полученном выше коде заменить в разряде знака числа 0 на 1.

Получим:

11000101110010101001011110001101

А в шестнадцатеричной форме:

C5CA978D

Никакого инвертирования, как для отрицательных чисел с фиксированной точкой, здесь не происходит.

Рассмотрим, наконец, вопрос о диапазоне чисел, представимых в форме с плавающей точкой. Очевидно, положительные и отрицательные числа расположены симметрично относительно нуля. Следовательно, максимальное и минимальное числа равны между собой по модулю: Rmax = |Rmin|. Наименьшее по абсолютной величине число равно нулю. Чему же равно Rmax? Это число с самой большой мантиссой и самым большим порядком:

0,111111111111111111111111*1021111111

Если перевести в десятичную систему, то получится

Rmax = (1 - 2-24) * 264 = 1019

Очевидно, что диапазон вещественных чисел значительно шире диапазона целых чисел. Если в результате вычислений получается число по модулю большее, чем Rmax, то происходит прерывание работы процессора. Такая ситуация называется переполнением при вычислениях с плавающей точкой. Наименьшее по модулю ненулевое значение равно:

(1/2) * 2-64=2-66.

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

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

N = 2t * ( U - L+ 1) + 1.

Здесь t — количество двоичных разрядов мантиссы; U — максимальное значение математического порядка; L — минимальное значение порядка. Для рассмотренного нами варианта (t = 24, U = 63, L = -64) получается:

N = 2 146 683 548.

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

Вопросы и задания

  1. Что такое форма с фиксированной точкой? Для представления каких чисел в компьютере она используется?
  2. Как в форме с фиксированной точкой представляются целые положительные и отрицательные числа?
Компьютеры TopCTO Компьютеры цены продажа be number one
Сайт управляется системой uCoz