23 ноября Представление чисел в формате с фиксированной запятой Изучаемые вопросы: • Представление целых чисел в памяти компьютера. • Представление отрицательных чисел в памяти компьютера. • Размер ячейки и диапазон значений чисел. • Особенности работы компьютера с целыми числами. ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ В ФОРМАТЕ С ФИКСИРОВАННОЙ ЗАПЯТОЙ Целые числа в компьютере хранятся в памяти в формате с фиксированной запятой. При хранении чисел в памяти в формате с фиксированной запятой каждому разряду ячейки памяти соответствует всегда один и тот же разряд числа, а запятая находится справа после младшего разряда, т.е. вне разрядной сетки. 1010=10102 0 0 0 0 1 0 1 0 Достоинства: • простота и наглядность представления чисел; • простота алгоритмов реализации арифметических операций (вычитание заменяется сложением). Недостаток: • конечный диапазон представления величин, недостаточный для решения задач, в которых используются очень малые и/или очень большие числа. ЦЕЛЫЕ НЕОТРИЦАТЕЛЬНЫЕ ЧИСЛА Для хранения целых неотрицательных чисел отводится одна ячейка памяти (8 битов). Минимальное число: 0 0 0 0 0 0 0 0 Минимальное число равно 0. Максимальное число: 1 1 1 1 1 1 1 1 111111112 = 1000000002 -1 = 28 – 1 = 25510 Максимальное число равно 25510. Диапазон изменения целых неотрицательных чисел от 0 до 255. Для n-разрядного представления максимальное целое неотрицательное число равно 2n – 1. ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ Для хранения целых чисел со знаком отводится две ячейки памяти (16 битов). Для хранения больших целых чисел со знаком отводится четыре ячейки памяти (32 бита). Старший (левый) разряд отводится под знак числа: 0 – положительное число, 1 – отрицательное число. 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 Представление в компьютере положительных чисел с использованием формата «знак-величина» называется прямым кодом числа. ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ Для n-разрядного представления со знаком (с учетом выделения одного разряда на знак): максимальное положительное число равно 2n-1 – минимальное отрицательное число равно А10 = 215 – 1 = 3276710 А10 = – 215 = – 3276810 А10 = 231 – 1 = 2 147 483 647 10 А10 = – 231 = – 2 147 483 648 10 1, – 2n-1 Диапазон хранения целых чисел со знаком от – 32 768 до 32 767. Диапазон хранения больших целых чисел со знаком от – 2 147 483 648 до 2 147 483 647. ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ 3 +(-3) = 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 ≠0 ДОПОЛНИТЕЛЬНЫЙ КОД Для представления отрицательных чисел используется дополнительный код, позволяющий заменить арифметическую операцию вычитания операцией сложения. Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен 2n - |А|. 2n - |А| + |А| = 0 Дополнительный код представляет собой дополнение модуля числа А до 0. Это равенство тождественно справедливо, так как в компьютерной n-разрядной арифметике 2n ≡ 0. Действительно, двоичная запись числа 2n состоит из одной единицы и n нулей, а в n-разрядную ячейку может уместиться только n младших разрядов, т.е. n нулей. 28=100000000 0 0 0 0 0 0 0 0 ДОПОЛНИТЕЛЬНЫЙ КОД Найдём дополнительный код отрицательного числа –200210 при n=16: 2n - |А| 2n |А| 2n - |А| 216 = 200210 = 216- |200210| = 1 00000000 000000002 00000111 110100102 11111000 001011102 6553610 200210 6353410 2n - |А| + |А| = 0 2n - |А| |А| 1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 АЛГОРИТМ ПОЛУЧЕНИЯ ДОПОЛНИТЕЛЬНОГО КОДА Алгоритм получения дополнительного кода отрицательного числа: 1. Модуль числа записать прямым кодом в n двоичных разрядах. 2. Получить обратный код числа, для этого значения всех битов инвертировать. 3. К полученному обратному коду прибавить единицу. Найдём дополнительный код отрицательного числа –200210 при n=16: Прямой код |-200210| 00000111 110100102 Обратный код Инвертирование 11111000 001011012 Прибавление единицы Дополнительный код + 11111000 001011012 00000000 000000012 11111000 001011102 ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКОГО ДЕЙСТВИЯ Выполнить арифметическое действие 2010 – 3010 в 16-разрядном компьютерном представлении. Десятичное число Прямой код Обратный код Дополнительный код 11111111 111000012 11111111 111000012 + 00000000 000000012 11111111 111000102 20 00000000 000101002 -30 00000000 000111102 00000000 000101002 + 11111111 111000102 11111111 111101102 2010 – 3010 11111111 111101102 Дополнительный код ПЕРЕВОД ДОПОЛНИТЕЛЬНОГО КОДА В ДЕСЯТИЧНОЕ ЧИСЛО В 16-разрядном компьютерном представлении 2010 – 3010 11111111 111101102 Переведем полученный дополнительный код в десятичное число: 1. Инвертируем дополнительный код: 00000000 00001001 2. К полученному коду прибавим 1 (получим модуль отрицательного числа): 00000000 00001010 3. Переведем в десятичное число и припишем знак отрицательного числа: -10 ПЕРЕВОД ДОПОЛНИТЕЛЬНОГО КОДА В ДЕСЯТИЧНОЕ ЧИСЛО В 16-разрядном компьютерном представлении 2010 – 3010 11111111 111101102 Переведем полученный дополнительный код в десятичное число: 1. Отнимем 1 от дополнительного кода: 11111111 11110101 2. Инвертируем полученное число: 00000000 00001010 3. Переведем в десятичное число и припишем знак отрицательного числа: -10 Почему не применяется данный метод перевода дополнительного кода в десятичное число? ПРАКТИКУМ Для n-разрядного представления со знаком минимальное отрицательное число равно –2n-1 Задача. Найти минимальное отрицательное число в 8-разрядном компьютерном представлении 1 0 0 0 0 0 0 0 1000000 в десятичное число: Инвертируем дополнительный код: 01111111 Переведем дополнительный код 1. 2. К полученному коду прибавим 1 (получим модуль отрицательного числа): 10000000 3. Переведем в десятичное число и припишем знак отрицательного числа: -128 ПРАКТИКУМ Задача. Найти максимальное отрицательное число в 8-разрядном компьютерном представлении 1 1 1 1 1 1 1 1 11111111 в десятичное число: Инвертируем дополнительный код: 00000000 Переведем дополнительный код 1. 2. К полученному коду прибавим 1 (получим модуль отрицательного числа): 00000001 3. Переведем в десятичное число и припишем знак отрицательного числа: -1 ОСОБЕННОСТИ РАБОТЫ С ЦЕЛЫМИ ЧИСЛАМИ Выполняя на компьютере вычисления с целыми числами, нужно помнить об ограниченности диапазона допустимых значений. Выход результата за границы допустимого диапазона называется переполнением. Переполнение при вычислениях с целыми числами не вызывает прерывания работы процессора, но результаты могут оказаться неправильными. ПРАКТИКУМ Задача. Компьютер работает только с целыми числами, представленными в однобайтовой ячейке памяти. Какое значение будет получено в результате вычисления значения арифметического выражения 100+39? Решение: Внутреннее представление числа 100: 01100100 Внутреннее представление числа 39: 00100111 Внутреннее представление суммы 100+39: 10001011 Знаковый разряд равен 1, значит число отрицательное. Инвертируем код: 01110100 Прибавим 1: 01110101 Переведем в десятичное число и припишем знак отрицательного числа: -117 Переполнение привело к неправильному результату! ПРАКТИКУМ 1. Записать внутреннее представление следующих десятичных чисел, • используя 8-разрядную ячейку: а) 64 б) -120 в) -96 г) 57 • используя 16-разрядную ячейку: а) -15098 б) 6524 в) -28987 2. Определите, каким десятичным числам соответствуют следующие двоичные коды 8-разрядного представления целых чисел: а) 00100111 б) 11001110 в) 10101010 г) 01111110 ЗАДАНИЕ НА ДОМ Учить: § 2.10.1 (с.143-148) Выполнить: №2.14 (с.147) и №2.15 (с.148)