2. ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ
Любая информация в ЭВМ представляется в виде двоичных кодов. Отдельные
элементы двоичного кода, принимающие значение 0 или 1, называют разрядами или
битами. Память компьютера условно делиться на отсеки или ячейки, каждая из которых
имеет свой номер. Нумерация начинается с нуля.
Минимальной адресуемой ячейкой памяти называется байт – 8 двоичных
разрядов. порядковый номер байта называется его адресом.
Наибольшую последовательность битов, которую процессор может обрабатывать
как единое целое, называют машинным словом.
Длина машинного слова может быть разной - 8 , 16 , 32 бит и т.д. Двоичные
разряды в любой ячейке памяти нумеруются справа налево, начиная с нуля.
3. Для положительных и отрицательных чисел существует знаковый способ
представления числа. Под знак отводится старший разряд ячейки:
0 - для положительных чисел,
1 - для отрицательных чисел.
Целые числа
• Представление чисел в формате с
фиксированной запятой
Дробные числа
• представление числа в формате с
плавающей точкой используется для
задания некоторого подмножества
действительных чисел
Два основных формата
представления чисел
4. ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ
В ФОРМАТЕ С ФИКСИРОВАННОЙ ЗАПЯТОЙ
Целые числа в компьютере хранятся в памяти в формате
с фиксированной запятой.
При хранении чисел в памяти в формате с фиксированной запятой каждому
разряду ячейки памяти соответствует всегда один и тот же разряд числа, а
запятая находится справа после младшего разряда, т.е. вне разрядной сетки.
Достоинства:
• простота и наглядность представления чисел;
• простота алгоритмов реализации арифметических операций (вычитание
заменяется сложением).
Недостаток:
• конечный диапазон представления величин, недостаточный для
решения задач, в которых используются очень малые и/или очень большие
числа.
0 0 0 0 1 0 1 01010=10102
5. ЦЕЛЫЕ НЕОТРИЦАТЕЛЬНЫЕ ЧИСЛА
Для хранения целых неотрицательных чисел отводится
одна ячейка памяти (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
6. ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ
Представление в компьютере положительных чисел
с использованием формата «знак-величина» называется
прямым кодом числа.
Старший (левый) разряд отводится под знак числа:
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
7. ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ
Для 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
9. ДОПОЛНИТЕЛЬНЫЙ КОД
Для представления отрицательных чисел используется
дополнительный код, позволяющий заменить арифметическую
операцию вычитания операцией сложения.
Дополнительный код представляет собой
дополнение модуля числа А до 0.
Дополнительный код отрицательного числа А,
хранящегося в n ячейках, равен 2n - |А|.
Это равенство тождественно справедливо, так как в компьютерной
n-разрядной арифметике 2n ≡ 0.
Действительно, двоичная запись числа 2n состоит из одной единицы и n
нулей, а в n-разрядную ячейку может уместиться только n младших
разрядов, т.е. n нулей. 28=100000000
0 0 0 0 0 0 0 0
2n - |А| + |А| = 0
11. АЛГОРИТМ ПОЛУЧЕНИЯ
ДОПОЛНИТЕЛЬНОГО КОДА
Алгоритм получения дополнительного кода отрицательного
числа:
1. Модуль числа записать прямым кодом в n двоичных
разрядах.
2. Получить обратный код числа, для этого значения
всех битов инвертировать.
3. К полученному обратному коду прибавить единицу.
Прямой код |-200210| 00000111 110100102
Обратный код Инвертирование 11111000 001011012
Прибавление единицы 11111000 001011012
00000000 000000012
Дополнительный код 11111000 001011102
Найдём дополнительный код отрицательного числа –200210 при
n=16:
+
12. ВЫПОЛНЕНИЕ
АРИФМЕТИЧЕСКОГО ДЕЙСТВИЯ
Выполнить арифметическое действие 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
+
+
Дополнительный код
13. ПЕРЕВОД ДОПОЛНИТЕЛЬНОГО КОДА В ДЕСЯТИЧНОЕ ЧИСЛО
В 16-разрядном компьютерном представлении
2010 – 3010 11111111 111101102
Переведем полученный дополнительный код в десятичное число:
1. Инвертируем дополнительный код:
00000000 00001001
2. К полученному коду прибавим 1 (получим модуль
отрицательного числа):
00000000 00001010
3. Переведем в десятичное число и припишем знак
отрицательного числа: -10
14. ПЕРЕВОД
ДОПОЛНИТЕЛЬНОГО КОДА В ДЕСЯТИЧНОЕ ЧИСЛО
В 16-разрядном компьютерном представлении
2010 – 3010 11111111 111101102
Переведем полученный дополнительный код в десятичное число:
1. Отнимем 1 от дополнительного кода:
11111111 11110101
2. Инвертируем полученное число:
00000000 00001010
3. Переведем в десятичное число и припишем знак
отрицательного числа: -10
Почему не применяется данный метод перевода
дополнительного кода в десятичное число?
15. ПРАКТИКУМ
Задача. Найти минимальное отрицательное число в 8-разрядном
компьютерном представлении
1 0 0 0 0 0 0 0
Переведем дополнительный код 1000000 в десятичное число:
1. Инвертируем дополнительный код: 01111111
2. К полученному коду прибавим 1 (получим модуль отрицательного
числа): 10000000
3. Переведем в десятичное число и припишем знак отрицательного
числа: -128
Для n-разрядного представления со знаком минимальное отрицательное число равно –2n-1
16. ПРАКТИКУМ
Задача. Найти максимальное отрицательное число в 8-разрядном
компьютерном представлении
1 1 1 1 1 1 1 1
Переведем дополнительный код 11111111 в десятичное число:
1. Инвертируем дополнительный код: 00000000
2. К полученному коду прибавим 1 (получим модуль отрицательного
числа): 00000001
3. Переведем в десятичное число и припишем знак отрицательного
числа: -1
17. Выполняя на компьютере вычисления с целыми
числами, нужно помнить
об ограниченности диапазона
допустимых значений.
Выход результата за границы
допустимого диапазона называется
переполнением.
Переполнение при вычислениях с целыми
числами не вызывает прерывания работы
процессора, но результаты могут
оказаться неправильными.
ОСОБЕННОСТИ РАБОТЫ
С ЦЕЛЫМИ ЧИСЛАМИ
18. ПРАКТИКУМ
Задача. Компьютер работает только с целыми числами,
представленными в однобайтовой ячейке памяти. Какое
значение будет получено в результате вычисления
значения арифметического выражения 100+39?
Переведем в десятичное число
и припишем знак отрицательного числа:
Решение:
Внутреннее представление числа 100: 01100100
Внутреннее представление числа 39: 00100111
Внутреннее представление суммы 100+39: 10001011
Знаковый разряд равен 1, значит число отрицательное.
Инвертируем код: 01110100
Прибавим 1: 01110101
-117
Переполнение привело к неправильному результату!
20. ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ В ФОРМАТЕ
С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
Вещественные числа хранятся и обрабатываются в компьютере в
формате с плавающей запятой
(положение запятой в записи числа может изменяться).
Формат чисел с плавающей запятой базируется на экспоненциальной
форме записи:
А = m qn,
где m – мантисса числа,
q – основание системы счисления,
n – порядок числа.
Для однозначности представления чисел с плавающей запятой
используется нормализованная форма, при которой мантисса отвечает
условию:
1/n ≤ |m| < 1,
т.е. мантисса должна быть правильной дробью и иметь после запятой
цифру, отличную от нуля.
21. ПРИВЕДЕНИЕ ЧИСЛА С ПЛАВАЮЩЕЙ ЗАПЯТОЙ К
НОРМАЛИЗОВАННОЙ ФОРМЕ
Диапазон изменения чисел определяется количеством разрядов, отведенных
для хранения порядка числа,
а точность (количество значащих цифр) определяется количеством разрядов,
отведенных для хранения мантиссы.
Преобразуем десятичное число 888,888 в экспоненциальную форму с
нормализованной мантиссой:
888,888 = 0,888888 103
Число в форме с плавающей запятой занимает в памяти компьютера
четыре байта (число обычной точности) или восемь байтов (число двойной
точности).
Нормализованная мантисса m = 0,888888, порядок n = 3.
При записи числа с плавающей запятой выделяются разряды для
хранения знака мантиссы, знака порядка, порядка и мантиссы.
22. ОПРЕДЕЛЕНИЕ МАКСИМАЛЬНОГО ЧИСЛА
И ЕГО ТОЧНОСТИ
Максимальное значение порядка числа составит 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
знак и мантисса
23. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ С ЧИСЛАМИ
В ФОРМАТЕ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
При сложении и вычитании чисел в формате с
плавающей запятой сначала производится
выравнивание порядков (меньший по
модулю порядок числа увеличивается до
величины большего по модулю порядка числа,
а мантисса уменьшается в такое же количество
раз), а затем сложение или вычитание
мантисс.
При умножении чисел в формате с плавающей
запятой порядки складываются, а
мантиссы перемножаются.
При делении из порядка делимого
вычитается порядок делителя, а
мантисса делится на мантиссу делителя.
После выполнения арифметической операции производится нормализация.
Выполнить арифметические операции с числами 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
24. Пример 1. Как будет представлено в памяти компьютера целое число 1234510 ?
Решение
Для размещения числа возьмем два байта.
Поскольку число положительное, то в старшем (15-м) бите будет 0.
Переведем число в двоичную систему счисления:
1234510 = 110000001110012.
Результат:
0 0110000 00111001
Знак числа число
ПРАКТИКУМ
25. Пример 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
26. Пример 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
27. Задания для самостоятельного выполнения
1. Запишите прямые коды десятичных чисел в однобайтовом формате:
а) 64 б) 58 в) 72 г) -96
2. Запишите двоичные числа в дополнительном коде:
а) 1010 б) -1001 в) -11 г) -11011
3. Переведите в прямой код числа, записанные в дополнительном коде, и
найдите их десятичные эквиваленты:
а) 00000100 б) 11111001
4. Представьте целые числа в 16-разрядной ЭВМ:
а) 25 б) -25 в) 801 г) -610
28. Задания для самостоятельного выполнения
1. Сравните числа:
а) 318,4785∙109 и 3,184785∙1011; б) 218,4785∙10-3 и 1847,85∙10-4;
2. Запишите числа в естественной форме:
а) 0,1100000∙2100; б) 0,1001111∙2-111;
3. Выполните действия:
а) 0,101010∙211 + 0,110011∙2100;
б) 0,100011∙2100 – 0,100001∙2100;
в) 0,110011∙2-10 * 0,100001∙21;
г) 0,101001∙210 / 0,100000∙210.
30. Выполнение арифметических действий над числами с плавающей запятой
гораздо сложнее целочисленной арифметики. Для некоторых процессоров (в
частности Intel) операции над вещественными числами вынесены в отдельный
узел, который называют математическим сопроцессором.
Сложение чисел с плавающей запятой выполняется в соответствии со
следующим алгоритмом.
1. Представить числа А и В в нормализованном виде, записав отдельно
значения мантисс и порядков.
2. Выровнять порядки по числу с большим порядком.
3. Выровнять число цифр в мантиссах по числу, порядок которого не
изменился.
4. Сложить числа.
5. Нормализовать сумму, оставив число цифр в мантиссе таким, как у
числа, порядок которого не изменялся.
31. Пример. Найти сумму чисел А = 9,6098 и В = 98,009 по правилу сложения
чисел с плавающей запятой.
Решение:
Результат представим в виде таблицы:
Шаг Число Нормализованное число Порядок Мантисса Число
цифр в
мантиссе
1 А=9,6098 0,96098∙101 1 96098 5
В=98,009 0,98009∙102 2 98009 5
2 А 0,096098∙102 2 096098 6
3 А 0,09609∙102 2 09609 5
4 А+В 1,07618∙102 2 - -
5 А+В 0,101761∙103 3 10761 5