представление чисел в памяти компьютера
TRANSCRIPT
Представление чисел в памяти компьютера.
Долинин А.А., учитель информатики и ИКТ МБОУ «Уренская СОШ № 1»
ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛЛюбая информация в ЭВМ представляется в виде двоичных кодов. Отдельные
элементы двоичного кода, принимающие значение 0 или 1, называют разрядами или битами. Память компьютера условно делиться на отсеки или ячейки, каждая из которых имеет свой номер. Нумерация начинается с нуля.
Минимальной адресуемой ячейкой памяти называется байт – 8 двоичных разрядов. порядковый номер байта называется его адресом.
Наибольшую последовательность битов, которую процессор может обрабатывать как единое целое, называют машинным словом.
Длина машинного слова может быть разной - 8 , 16 , 32 бит и т.д. Двоичные разряды в любой ячейке памяти нумеруются справа налево, начиная с нуля.
Для положительных и отрицательных чисел существует знаковый способ представления числа. Под знак отводится старший разряд ячейки:
0 - для положительных чисел, 1 - для отрицательных чисел.
Целые числа• Представление чисел в формате с
фиксированной запятой
Дробные числа• представление числа в формате с
плавающей точкой используется для задания некоторого подмножества действительных чисел
Два основных формата представления чисел
ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ В ФОРМАТЕ С ФИКСИРОВАННОЙ ЗАПЯТОЙ
Целые числа в компьютере хранятся в памяти в формате с фиксированной запятой.
При хранении чисел в памяти в формате с фиксированной запятой каждому разряду ячейки памяти соответствует всегда один и тот же разряд числа, а запятая находится справа после младшего разряда, т.е. вне разрядной сетки.
Достоинства: • простота и наглядность представления чисел;• простота алгоритмов реализации арифметических операций (вычитание
заменяется сложением).Недостаток:
• конечный диапазон представления величин, недостаточный для решения задач, в которых используются очень малые и/или очень большие числа.
0 0 0 0 1 0 1 01010=10102
ЦЕЛЫЕ НЕОТРИЦАТЕЛЬНЫЕ ЧИСЛА
Для хранения целых неотрицательных чисел отводится одна ячейка памяти (8 битов).
Минимальное число:
Максимальное число:
Для n-разрядного представления максимальное целое неотрицательное число равно 2n – 1.
Минимальное число равно 0.
Максимальное число равно 25510.
111111112 = 1000000002 -1 = 28 – 1 = 25510
Диапазон изменения целых неотрицательных чисел от 0 до 255.
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ
Представление в компьютере положительных чисел с использованием формата «знак-величина» называется
прямым кодом числа.
Старший (левый) разряд отводится под знак числа: 0 – положительное число,1 – отрицательное число.
Для хранения целых чисел со знаком отводится две ячейки памяти (16 битов).
Для хранения больших целых чисел со знаком отводится четыре ячейки памяти (32 бита).
1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
0 0 1 1 1 1 1 1
ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ
Для n-разрядного представления со знаком (с учетом выделения одного разряда на знак):
максимальное положительное число равно 2n-1 – 1,
минимальное отрицательное число равно – 2n-1
Диапазон хранения целых чисел со знаком от – 32 768 до 32 767.
Диапазон хранения больших целых чисел со знаком
от – 2 147 483 648 до 2 147 483 647.
А10 = 215 – 1 = 3276710
А10 = – 215 = – 3276810
А10 = 231 – 1 = 2 147 483 647 10
А10 = – 231 = – 2 147 483 648 10
ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ
3 +(-3) = 0
1 0 0 0 0 1 1 0 ≠ 01 0 0 0 0 0 1 10 0 0 0 0 0 1 1
ДОПОЛНИТЕЛЬНЫЙ КОД
Для представления отрицательных чисел используется дополнительный код, позволяющий заменить арифметическую
операцию вычитания операцией сложения.
Дополнительный код представляет собойдополнение модуля числа А до 0.
Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен 2n - |А|.
Это равенство тождественно справедливо, так как в компьютерной n-разрядной арифметике 2n ≡ 0. Действительно, двоичная запись числа 2n состоит из одной единицы и n нулей, а в n-разрядную ячейку может уместиться только n младших
разрядов, т.е. n нулей. 28=100000000 0 0 0 0 0 0 0 0
2n - |А| + |А| = 0
ДОПОЛНИТЕЛЬНЫЙ КОД
Найдём дополнительный код отрицательного числа –200210 при n=16:
2n 216 = 1 00000000 000000002 6553610
|А| 200210 = 00000111 110100102 200210
2n - |А| 216- |200210| = 11111000 001011102 6353410
1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 00 0 0 0 0 1 1 1 1 1 0 1 0 0 1 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2n - |А|
|А|
1
2n - |А| + |А| = 0
2n - |А|
АЛГОРИТМ ПОЛУЧЕНИЯ ДОПОЛНИТЕЛЬНОГО КОДА
Алгоритм получения дополнительного кода отрицательного числа:1. Модуль числа записать прямым кодом в n двоичных
разрядах.2. Получить обратный код числа, для этого значения
всех битов инвертировать.3. К полученному обратному коду прибавить единицу.
Прямой код |-200210| 00000111 110100102
Обратный код Инвертирование 11111000 001011012
Прибавление единицы 11111000 001011012
00000000 000000012
Дополнительный код 11111000 001011102
Найдём дополнительный код отрицательного числа –200210 при n=16:
+
ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКОГО ДЕЙСТВИЯ
Выполнить арифметическое действие 2010 – 3010 в 16-разрядном компьютерном представлении.
00000000 000101002
11111111 111000102
11111111 111101102
Десятичное число
Прямой код Обратный код Дополнительный код
20 00000000 000101002
-30 00000000 000111102 11111111 111000012 11111111 111000012
00000000 000000012
11111111 111000102
2010 – 3010 11111111 111101102
+
+
Дополнительный код
ПЕРЕВОД ДОПОЛНИТЕЛЬНОГО КОДА В ДЕСЯТИЧНОЕ ЧИСЛО
В 16-разрядном компьютерном представлении
2010 – 3010 11111111 111101102
Переведем полученный дополнительный код в десятичное число:
1. Инвертируем дополнительный код:
00000000 000010012. К полученному коду прибавим 1 (получим модуль
отрицательного числа): 00000000 00001010
3. Переведем в десятичное число и припишем знак отрицательного числа: -10
ПЕРЕВОД ДОПОЛНИТЕЛЬНОГО КОДА В ДЕСЯТИЧНОЕ ЧИСЛО
В 16-разрядном компьютерном представлении
2010 – 3010 11111111 111101102
Переведем полученный дополнительный код в десятичное число:
1. Отнимем 1 от дополнительного кода:
11111111 111101012. Инвертируем полученное число:
00000000 000010103. Переведем в десятичное число и припишем знак
отрицательного числа: -10
Почему не применяется данный метод перевода дополнительного кода в десятичное число?
ПРАКТИКУМ
Задача. Найти минимальное отрицательное число в 8-разрядном компьютерном представлении
1 0 0 0 0 0 0 0Переведем дополнительный код 1000000 в десятичное число:
1. Инвертируем дополнительный код: 011111112. К полученному коду прибавим 1 (получим модуль отрицательного
числа): 100000003. Переведем в десятичное число и припишем знак отрицательного
числа: -128
Для n-разрядного представления со знаком минимальное отрицательное число равно –2n-1
ПРАКТИКУМ
Задача. Найти максимальное отрицательное число в 8-разрядном компьютерном представлении
1 1 1 1 1 1 1 1Переведем дополнительный код 11111111 в десятичное число:
1. Инвертируем дополнительный код: 000000002. К полученному коду прибавим 1 (получим модуль отрицательного
числа): 000000013. Переведем в десятичное число и припишем знак отрицательного
числа: -1
Выполняя на компьютере вычисления с целыми числами, нужно помнить
об ограниченности диапазона допустимых значений.
Выход результата за границы допустимого диапазона называется
переполнением.
Переполнение при вычислениях с целыми числами не вызывает прерывания работы
процессора, но результаты могут оказаться неправильными.
ОСОБЕННОСТИ РАБОТЫ С ЦЕЛЫМИ ЧИСЛАМИ
ПРАКТИКУМ
Задача. Компьютер работает только с целыми числами, представленными в однобайтовой ячейке памяти. Какое значение будет получено в результате вычисления значения арифметического выражения 100+39?
Переведем в десятичное число и припишем знак отрицательного числа:
Решение:
Внутреннее представление числа 100: 01100100
Внутреннее представление числа 39: 00100111
Внутреннее представление суммы 100+39: 10001011
Знаковый разряд равен 1, значит число отрицательное.
Инвертируем код: 01110100
Прибавим 1: 01110101
-117
Переполнение привело к неправильному результату!
Представление чисел в формате
с плавающей запятой
ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ В ФОРМАТЕ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
Вещественные числа хранятся и обрабатываются в компьютере в формате с плавающей запятой
(положение запятой в записи числа может изменяться).
Формат чисел с плавающей запятой базируется на экспоненциальной форме записи:
А = m qn,где m – мантисса числа, q – основание системы счисления, n – порядок числа.
Для однозначности представления чисел с плавающей запятой используется нормализованная форма, при которой мантисса отвечает условию:
1/n ≤ |m| < 1,т.е. мантисса должна быть правильной дробью и иметь после запятой цифру, отличную от нуля.
ПРИВЕДЕНИЕ ЧИСЛА С ПЛАВАЮЩЕЙ ЗАПЯТОЙ К НОРМАЛИЗОВАННОЙ ФОРМЕ
Диапазон изменения чисел определяется количеством разрядов, отведенных для хранения порядка числа,
а точность (количество значащих цифр) определяется количеством разрядов, отведенных для хранения мантиссы.
Преобразуем десятичное число 888,888 в экспоненциальную форму с нормализованной мантиссой:
888,888 = 0,888888 103
Число в форме с плавающей запятой занимает в памяти компьютера четыре байта (число обычной точности) или восемь байтов (число двойной
точности).
Нормализованная мантисса m = 0,888888, порядок n = 3.
При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.
ОПРЕДЕЛЕНИЕ МАКСИМАЛЬНОГО ЧИСЛА И ЕГО ТОЧНОСТИ
Максимальное значение порядка числа составит 11111112 = 12710, следовательно, максимальное число:
2127 = 1,7014118346046923173168730371588 1038.
Максимальное значение положительной мантиссы: 223 – 1 ≈ 223 = 2(102,3) ≈ 10002,3 = 10(32,3) ≈ 107.
Максимальное значение чисел обычной точности с учетом возможной точности вычислений составит 1,701411 1038, т.к. количество значащих цифр
десятичного числа ограничено 7 разрядами).
Задача. Определить максимальное число и его точность для формата чисел обычной точности, если для хранения порядка и его знака отводится 8 разрядов, а для хранения мантиссы и ее знака – 24 разряда.
0 1 1 1 1 1 1 1
знак и порядок
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
знак и мантисса
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ С ЧИСЛАМИ В ФОРМАТЕ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
При сложении и вычитании чисел в формате с плавающей запятой сначала производится выравнивание порядков (меньший по модулю порядок числа увеличивается до величины большего по модулю порядка числа, а мантисса уменьшается в такое же количество раз), а затем сложение или вычитание мантисс.
При умножении чисел в формате с плавающей запятой порядки складываются, а мантиссы перемножаются.
При делении из порядка делимого вычитается порядок делителя, а мантисса делится на мантиссу делителя.
После выполнения арифметической операции производится нормализация.
Выполнить арифметические операции с числами 0,1 25 и 0,1 23.
0,100 25 0,001 25
0,101 25
+
0,100 25 0,001 25
0,011 25 = 0,11 24
-
0,1 25 0,1 23
0,01 28 = 0,1 27
0,1 25 0,1 23
1 22 = 0,1 23
Пример 1. Как будет представлено в памяти компьютера целое число 1234510 ?
РешениеДля размещения числа возьмем два байта.Поскольку число положительное, то в старшем (15-м) бите будет 0.Переведем число в двоичную систему счисления:1234510 = 110000001110012.Результат:
0 0110000 00111001
Знак числа число
ПРАКТИКУМ
Пример 2. Как будет представлено в памяти компьютера число —123,4510 ? Решение Представим число в 4 байтах.Нормализованный вид: -0,12345∙103 .Число отрицательное, поэтому старшим (31-й) бит равен 1.Порядок равен 3, он положительный, значит, З0-й бит равен 0.Число 3 в двоичной системе счисления имеет вид 11. Чтобы записать его в оставшихся 6 битах старшего байта, необходимо добавить незначащие нули.Таким образом, старший байт имеет вид: 10000011 .Найдем двоичное представление мантиссы 0,12345 по алгоритму перевода дробной части, 24 раза умножив ее на 2.Результат:
Пример 2. Раскодировать содержимое четырех байтов памяти: а) как два целых числа; б) как одно вещественное:
Решениеа) 17793;-128;б) приблизительно 0,5058593 • 10-3 (порядок записан в дополнительном коде).
01000101 10000001 10000000 10000000
Пример 3.
Записать внутреннее представление числа 250,1875 в форме с плавающей точкой в 4-х байтовом машинном слове.Решение:1. Переведем число в двоичную систему счисления с 24 значащими цифрами (3 байта под мантиссу):250.187510= 11111010,00110000000000002.2. Запишем в форме нормализованного двоичного числа с плавающей точкой: 0,111110100011000000000000∙101000
2. Здесь мантисса, основание системы счисления (210 = 102) и порядок (810 = 10002) записаны в двоичной системе.3. Вычислим характеристику: S2 =1000 + 1000000 = 1001000.4. Запишем представление числа в 4-байтовой ячейке памяти с учетом знака числа:
Шестнадцатеричная форма: 48FA3000.
0 1001000 11111010 00110000 00000000
Задания для самостоятельного выполнения
1. Запишите прямые коды десятичных чисел в однобайтовом формате:а) 64 б) 58 в) 72 г) -96
2. Запишите двоичные числа в дополнительном коде:а) 1010 б) -1001 в) -11 г) -11011
3. Переведите в прямой код числа, записанные в дополнительном коде, и найдите их десятичные эквиваленты:
а) 00000100 б) 11111001
4. Представьте целые числа в 16-разрядной ЭВМ:а) 25 б) -25 в) 801 г) -610
Задания для самостоятельного выполнения
1. Сравните числа:а) 318,4785 10∙ 9 и 3,184785 10∙ 11; б) 218,4785 10∙ -3 и 1847,85 10∙ -4;
2. Запишите числа в естественной форме:а) 0,1100000 2∙ 100; б) 0,1001111 2∙ -111;
3. Выполните действия:а) 0,101010 2∙ 11 + 0,110011 2∙ 100;б) 0,100011 2∙ 100 – 0,100001 2∙ 100;в) 0,110011 2∙ -10 * 0,100001 2∙ 1;г) 0,101001 2∙ 10 / 0,100000 2∙ 10.
СЛОЖЕНИЕ ЧИСЕЛ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
Выполнение арифметических действий над числами с плавающей запятой гораздо сложнее целочисленной арифметики. Для некоторых процессоров (в частности Intel) операции над вещественными числами вынесены в отдельный узел, который называют математическим сопроцессором.
Сложение чисел с плавающей запятой выполняется в соответствии со следующим алгоритмом.
1. Представить числа А и В в нормализованном виде, записав отдельно значения мантисс и порядков.
2. Выровнять порядки по числу с большим порядком.3. Выровнять число цифр в мантиссах по числу, порядок которого не
изменился.4. Сложить числа.5. Нормализовать сумму, оставив число цифр в мантиссе таким, как у
числа, порядок которого не изменялся.
Пример. Найти сумму чисел А = 9,6098 и В = 98,009 по правилу сложения чисел с плавающей запятой.
Решение:Результат представим в виде таблицы:
Шаг Число Нормализованное число Порядок Мантисса Число цифр в
мантиссе
1 А=9,6098 0,96098 10∙ 1 1 96098 5
В=98,009 0,98009 10∙ 2 2 98009 5
2 А 0,096098 10∙ 2 2 096098 6
3 А 0,09609 10∙ 2 2 09609 5
4 А+В 1,07618 10∙ 2 2 - -
5 А+В 0,101761 10∙ 3 3 10761 5