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

блог админа

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

Любая информация в памяти компьютера представляется в двоичном виде: последовательностью нулей и единиц. Исторически первым типом данных, с которыми стали работать компьютеры были числа. Теперь это и числа, и тексты, и изображение, и звук. Работа с данными любого типа в конечном счете сводится к обработке двоичных чисел — чисел, записываемых с помощью двух цифр — 0 и 1. Поэтому современные компьютерные технологииназывают цифровыми технологиями.

В компьютере различаются два типа числовых величин: целые числа и вещественные числа. Различаются способы их представления в памяти компьютера.

Представление целых чисел

Часть памяти, в которой хранится одно число, будем называть ячейкой. Минимальная ячейка, в которой может храниться целое число, имеет размер 8 битов — 1 байт. Получим представление десятичного числа 25 в такой ячейке. Для этого нужно перевести число в двоичную систему счисления. Как это делается, вы уже знаете. Результат перевода:

Теперь осталось «вписать» его в восьмиразрядную ячейку (записать так называемое внутреннее представление числа). Делается это так:

Число записывается «прижатым» к правому краю ячейки (в младших разрядах). Оставшиеся слева разряды (старшие) заполняются нулями.

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

Чему он равен в десятичной системе? Можно расписать это число в развернутой форме и вычислить выражение. Но можно решить задачу быстрее. Если к младшему разряду этого числа прибавить единицу, то получится число 10000000. В десятичной системе оно равно 2 7 = 128. Значит:

011111112 = 128 — 1 = 127.

Максимальное целое положительное число, помещающееся в 8-разрядную ячейку, равно 127.

Теперь рассмотрим представление целых отрицательных чисел. Как, например, в 8-разрядной ячейке памяти будет представлено число -25? Казалось бы, очевидным ответом является следующий: нужно в представлении числа 25 заменить старший разряд с 0 на 1. К сожалению, в компьютере все несколько сложнее.

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

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

1) записать внутреннее представление положительного числа X;
2) записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;
3) к полученному числу прибавить 1.

Определим по этим правилам внутреннее представление числа -2510 в 8-разрядной ячейке:

1) 00011001
2) 11100110
3) +1
11100111 — это и есть представление числа -25.

В результате выполнения такого алгоритма единица в старшем разряде получается автоматически. Она и является признаком отрицательного значения.

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

00011001
+11100111
1 00000000

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

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

Представление восьмиразрядного отрицательного числа -X дополняет представление соответствующего положительного числа +Х до значения 2 6 .

Размер ячейки к диапазон значений чисел

Наибольшее по модулю отрицательное значение в 8-разрядной ячейке равно -2 7 = -128. Его внутреннее представление: 10000000. Таким образом, диапазон представления целых чисел в восьмиразрядной ячейке следующий:

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

Теперь становится очевидной обобщенная формула для диапазона целых чисел в зависимости от разрядности N ячейки:

Диапазон для 32-разрядной ячейки получается достаточно большим:

Особенности работы компьютера с целыми числами

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

Представление вещественных чисел

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

Всякое вещественное число (X) можно записать в виде произведения мантиссы m и основания системы счисления р в некоторой целой степени n, которую называют порядком:

Например, число 25,324 можно записать в таком виде: 0,25324 · 10 2 . Здесь m = 0,25324 — мантисса, n = 2 — порядок. Порядок указывает, на какое количество позиций и в каком направлении должна сместиться десятичная запятая в мантиссе.

Чаще всего для хранения вещественных чисел в памяти компьютера используется либо 32-разрядная, либо 64-разрядная ячейка. Первый вариант называется представлением с обычной точностью, второй — представлением с удвоенной точностью. В ячейке хранятся два числа в двоичной системе счисления: мантисса и порядок. Здесь мы не будем подробно рассматривать правила представления вещественных чисел. Отметим лишь основные следствия, вытекающие из этих правил, которые важно знать пользователю компьютера, занимающемуся математическими вычислениями.

Особенности работы компьютера с вещественными числами

1. Диапазон вещественных чисел ограничен. Но он значительно шире, чем для рассмотренного ранее способа представления целых чисел. Например, при использовании 32-разрядной ячейки этот диапазон следующий:

2. Выход за диапазон (переполнение) — аварийная ситуация для процессора, который прерывает свою работу.
3. Результаты машинных вычислений с вещественными числами содержат погрешность. При использовании удвоенной точности эта погрешность уменьшается.

Коротко о главном

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

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

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

Вещественные числа представляются в виде совокупности мантиссы и порядка в двоичной системе счисления. Обычный размер ячейки — 32 или 64 бита.

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

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

1. Как в памяти компьютера представляются целые положительные и отрицательные числа?
2. Укажите, каков был бы диапазон значений целых чисел, если бы для их хранения использовалась 4-разрядная ячейка.
3. Запишите внутреннее представление следующих десятичных чисел, используя 8-разрядную ячейку.
а) 32; б) -32; в) 102; г) -102; д) 126; е) -126.
4. Определите, каким десятичным числам соответствуют следующие двоичные коды 8-разрядного представления целых чисел.
а) 00010101; б) 11111110; в) 00111111; г) 10101010.

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

Цель работы: ознакомить студентов с представлением чисел в компьютере.

Теоретические сведения

Представление целых чисел

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

Если для представления числа в компьютере выделить 2 бита, то можно представить всего четыре разных числа: 00, 01, 10 и 11. Если для представления числа выделить 3 бита, то можно представить 8 разных чисел: 000, 001, 010, 011, 100, 101, 110, 111. Если же для представления числа выделить N битов, то можно представить 2 n разных чисел.

Пусть для представления числа используется 1 байт (8 битов). Тогда можно представить: 2 8 =256 разных чисел: от 0000 0000 до 1111 1111.Если перевести эти числа в десятичную систему, получится: 000000002=010, 111111112=25510. Значит при использовании для представления числа 1 байта можно представить числа от 0 до 255.

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

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

2. Числа хранятся в дополнительном коде.

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

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

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

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

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

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

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

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

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

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

Практические примеры

Для примеров с 1 – 7 предполагаем, что для представления числа в памяти компьютера используются 1 байт (8 битов).

Пример 1

Определить, является ли число 101101 положительным или отрицательным

1)Допишем слева недостающие нули, так чтобы в представлении числа было ровно 8 битов:00101101

2)Самый левый бит равен 0, значит число положительное: 00101101

Ответ: число 101101 – число положительное.

Пример 2

Определить, является число 10111011 положительным или отрицательным.

1) Допишем слева недостающие нули так, чтобы число было 8 битов. Здесь число уже содержит 8 цифр, поэтому нули добавлять не надо: 10111011

2) Самый левый бит равен 1, значит число отрицательное: 10111011

Ответ: 10111011 – число отрицательное.

Пример 3

Как будет представлено в памяти компьютера число 26 ?

1) Переводим число 26 в двоичную систему:

2) Допишем слева недостающие нули, так чтобы в представлении числа было ровно 8 цифр:00011010.

3) 26 – число положительное (левый бит равен 0), значит, его дополнительный код равен двоичному представлению, т.е. 00011010

Ответ: 26 будет представлено в памяти компьютера как 00011010.

Пример 4

Как будет представлено в памяти компьютера число –18 ?

1) Переведем модуль числа –18 в двоичную систему:

2) Допишем слева недостающие нули так, чтобы в представлении числа было равно 8 цифр: 00010010.

3) –18 число отрицательное. Определим его дополнительный код

а) меняем нули на единицы, а единицы на нули:

б) к получившемуся числу прибавляем 1: ;

Ответ: –18 будет представлено в компьютере как 11101110.

Пример 5

Что означает число 11011, хранящееся в памяти компьютера?

1) Допишем слева недостающие нули, так чтобы было ровно 8 цифр: 00011011

2) Это число положительное, его дополнительный код совпадает с двоичным представлением

3) Переведем число 11011 из двоичной системы в десятичную: 1 × 24 + 1 × 23 + 0 × 22 + 1 × 20 = 16 + 8 + 2 + 1 = 27

Ответ: число 11011 означает 27.

Пример 6

Что означает число 11110111, хранящееся в памяти компьютера?

1) Допишем слева недостающие нули, так чтобы число содержало 8 цифр (здесь и так 8 цифр, ничего дописывать не надо): 11110111;

2) Это число отрицательное, значит, надо от дополнительного кода, в котором число представлено в памяти компьютера, перейти к двоичному представлению:

а) меняем нули на единицы, а единицы на нули: 11110111 – > 00001000

б) к получившемуся числу прибавляем 1 ;

3) Получившееся число переводим

в десятичную систему:

1 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0 = 8 + 1 = 9 ;

4) Мы нашли модуль числа, но у нас число отрицательное, значит, надо перед числом поставить знак «», получим 9 .

Ответ: число 11110111 означает – 9.

Пример 7

Что означает число 9616 ?

1) Переведем в двоичную систему: 9216 – 100100102 ;

2) Число отрицательное, перейдем от дополнительного кода к двоичному представлению:

в десятичную систему

1 × 2 6 + 1 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 0 × 2 0 =

= 64 + 32 + 8 + 4 + 2 = 110;

4) Число отрицательное, ставим перед ним знак « – ».

Ответ: 9216 означают число – 110.

Пример 8

Для представления числа в памяти компьютера используются 32 байта. Как будет представлено в памяти компьютера – 37?

Запишем дополнительный код числа – 37, интерпретируя его как величину типа LongInt (тридцатидвухбитовое со знаком):

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

2. Инверсный код 11111111111111111111111111011010;

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

Пример 9

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

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

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

Пример 10

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

Представим положительное число в прямом, а отрицательное число в дополнительном коде:

Сложим прямой код положительного числа с дополнительным кодом отрицательного числа. Получим результат в дополнительном коде:

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

1) инвертируем дополнительный код: 0000011111001111;

2) прибавим к полученному коду 1 и получим модуль отрицательного числа:

;

3) переведем в десятичное число и припишем знак отрицательного числа: – 2000.

Итак все что хранится в памяти компьютера представлено в виде чисел

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

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

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

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

  2. 11111111 11111111 11101010 00000011

  3. 11111111 11111111 11101010 00000100

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

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

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

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

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

00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 =

1 00000000 00000000 00000000 00000000

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

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

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

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

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

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

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

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

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

Форма с плавающей точкой использует представление вещественного числа 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.25324 * 102. В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных. Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (р=2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:

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

&nbsp&nbsp&nbsp&nbsp&nbsp1-й байт &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 2-й байт&nbsp&nbsp&nbsp 3-й байт &nbsp 4-й байт&nbsp&nbsp

В старшем бите 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 единицы и имеет только положительные значения. При выполнении вычислений с плавающей точкой процессор это смещение учитывает.

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

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

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

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

45 CA 97 8D

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

11000101 11001010 10010111 10001101

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

C5 CA 97 8D

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

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

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

Rmax = (1 — 2 -24 ) * 2 64 = 10 19

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

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

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

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

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

N = 2 146 683 548.

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

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector