Представление положительных и отрицательных чисел в памяти компьютера. Прямой и дополнительный код числа
Прямой код – это представление числа в двоичной системе счисления, при котором первый (старший) разряд отводится под знак числа. Если число положительное, то в левый разряд записывается 0; если число отрицательное, то в левый разряд записывается 1.
Таким образом, в двоичной системе счисления, используя прямой код, в восьмиразрядной ячейке (байте) можно записать семиразрядное число. Например:
0 0001101 – положительное число
1 0001101 – отрицательное число
Количество значений, которые можно поместить в семиразрядной ячейке со знаком в дополнительном разряде равно 256. Это совпадает с количеством значений, которые можно поместить в восьмиразрядную ячейку без указания знака. Однако диапазон значений уже другой, ему принадлежат значения от -128 до 127 включительно (при переводе в десятичную систему счисления).
При этом в вычислительной технике прямой код используется почти исключительно для представления положительных чисел.
Для отрицательных чисел используется так называемый дополнительный код. Это связано с удобством выполнения операций над числами электронными устройствами компьютера.
Дополнительный код
В дополнительном коде, также как и прямом, первый разряд отводится для представления знака числа. Прямой код используется для представления положительных чисел, а дополнительный – для представления отрицательных. Поэтому, если в первом разряде находится 1, то мы имеем дело с дополнительным кодом и с отрицательным числом.
Все остальные разряды числа в дополнительном коде сначала инвертируются, т.е. заменяются противоположными (0 на 1, а 1 на 0). Например, если 1 0001100 – это прямой код числа, то при формировании его дополнительного кода, сначала надо заменить нули на единицы, а единицы на нули, кроме первого разряда. Получаем 1 1110011. Но это еще не окончательный вид дополнительного кода числа.
Далее следует прибавить единицу к получившемуся инверсией числу:
1 1110011 + 1 = 1 1110100
В итоге и получается число, которое принято называть дополнительным кодом числа.
Причина, по которой используется дополнительный код числа для представления отрицательных чисел, связана с тем, что так проще выполнять математические операции. Например, у нас два числа, представленных в прямом коде. Одно число положительное, другое – отрицательное и эти числа нужно сложить. Однако просто сложить их нельзя. Сначала компьютер должен определить, что это за числа.
Выяснив, что одно число отрицательное, ему следует заменить операцию сложения операцией вычитания. Потом, машина должна определить, какое число больше по модулю, чтобы выяснить знак результата и определиться с тем, что из чего вычитать. В итоге, получается сложный алгоритм. Куда проще складывать числа, если отрицательные преобразованы в дополнительный код.
Это можно увидеть на примерах ниже.
Операция сложения положительного числа и отрицательного числа, представленного в прямом коде
- Прямой код числа 5: 0 000 0101
Прямой код числа -7: 1 000 0111 - Два исходных числа сравниваются. В разряд знака результата записывается знак большего исходного числа.
- Если числа имеют разные знаки, то вместо операции сложения используется операция вычитания из большего по модулю значения меньшего. При этом первый (знаковый) разряд в операции не участвует.
_ 000 0111 000 0101
————- 000 0010 - После выполнения операции учитывается первый разряд. Результат операции 1 000 0010, или -210.
Операция сложения положительного числа и отрицательного числа, представленного в дополнительном коде
- Прямой код числа 5: 0 000 0101
Прямой код числа -7: 1 000 0111 - Формирование дополнительного кода числа -7. Прямой код : 1 000 0111 Инверсия : 1 111 1000
Добавление единицы: 1 111 1001
- Операция сложения. 0 000 0101
+ 1 111 1001 ————– 1 111 1110 - Проверка результата путем преобразования к прямому коду. Дополнительный код: 1 111 1110 Вычитание единицы : 1 111 1101
Инверсия : 1 000 0010 (или -210)
Источник: https://inf1.info/additionalcode
Дополнительный код (дополнение до двух)
Чаще всего для представления отрицательных чисел используется код с дополнением до двух (англ. two's complement). Он же называется обратный дополнительный код.
Алгоритм получения дополнительного кода числа:
если число положительное, то в старший разряд записывается ноль, далее записывается само число;
если число отрицательное, то все биты модуля числа инвертируются, то есть все единицы меняются на нули, а нули — на единицы, к инвертированному числу прибавляется единица, далее к результату дописывается знаковый разряд, равный единице.
Рис. 4. Нумерация двоичных чисел в представлении c дополнением до двух. |
В качестве примера переведём число −5 в дополнительный восьмибитовый код. Прямой код модуля −5 — 0000101, обратный — 1111010, прибавляем 1, получаем 1111011, приписываем 1 в качестве знакового разряда, в результате получаем 11111011.
Также дополнительный код отрицательного числа, хранящегося вбитах, равен. По сути, дополнительный код представляет собой дополнениедо: так как в-разрядной арифметике(двоичная запись этого числа состоит из единицы инулей, а в-разрядную ячейку помещаются толькомладших разрядов, то естьнулей), то верно равенство.
Для получения из дополнительного кода самого числа нужно инвертировать все разряды кода и прибавить к нему единицу. Можно проверить правильность, сложив дополнительный код с самим числом: результат должен быть равен. Переведём 11111011 обратно. Инвертируем — 00000100, прибавляем 1, получаем 00000101 — модуль исходного числа −5. Проверим: 11111011 + 00000101 = 100000000.
Можно получить диапазон значений.
Достоинства метода:
· возможность заменить арифметическую операцию вычитания операцией сложения и сделать операции сложения одинаковыми для знаковых и беззнаковых типов данных, что существенно упрощает архитектуру процессора и увеличивает его быстродействие;
· нет проблемы двух нулей.
Недостатки: ряд положительных и отрицательных чисел несимметричен, но это не так важно: с помощью дополнительного кода выполнены гораздо более важные вещи, желаемые от способа представления целых чисел.
Арифметические действия над целыми числами
Обратный и дополнительный коды применяются особенно широко, так как они позволяют упростить конструкцию арифметико-логического устройства (АЛУ) компьютера путем замены некоторых арифметических операций сложением.
Обычно десятичные числа при вводе в машину автоматически преобразуются в двоичный код (целые без знака), обратный или дополнительный код (целые со знаком) и в таком виде хранятся, перемещаются и участвуют в операциях. При выводе результатов из машины происходит обратное преобразование в десятичные числа.
Сложение и вычитание
Сложение и вычитание чисел без знака происходит по обычным для позиционных систем счисления алгоритмам.
Примеры (для k =3):
0012+1002= 1012;
1012-0102=0112.
Ситуации, когда уменьшаемое меньше вычитаемого или когда результат суммы не умещается в k разрядов, считаются ошибочными и должны отслеживаться устройством компьютера. Реакция на такие ошибки может быть различной в разных типах компьютеров.
Источник: https://cyberpedia.su/6×6517.html
Представление чисел в формате с фиксированной запятой Изучаемые вопросы: Представление целых чисел в памяти компьютера. Представление отрицательных чисел. – презентация
1 Представление чисел в формате с фиксированной запятой Изучаемые вопросы: Представление целых чисел в памяти компьютера. Представление отрицательных чисел в памяти компьютера. Размер ячейки и диапазон значений чисел. Особенности работы компьютера с целыми числами. 23 ноября
2 ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ В ФОРМАТЕ С ФИКСИРОВАННОЙ ЗАПЯТОЙ Целые числа в компьютере хранятся в памяти в формате с фиксированной запятой. При хранении чисел в памяти в формате с фиксированной запятой каждому разряду ячейки памяти соответствует всегда один и тот же разряд числа, а запятая находится справа после младшего разряда, т.е. вне разрядной сетки. Достоинства: простота и наглядность представления чисел; простота алгоритмов реализации арифметических операций (вычитание заменяется сложением). Недостаток: конечный диапазон представления величин, недостаточный для решения задач, в которых используются очень малые и/или очень большие числа =1010 2
3 ЦЕЛЫЕ НЕОТРИЦАТЕЛЬНЫЕ ЧИСЛА Для хранения целых неотрицательных чисел отводится одна ячейка памяти (8 битов). Минимальное число: Максимальное число: Для n-разрядного представления максимальное целое неотрицательное число равно 2 n – 1. Минимальное число равно 0. Максимальное число равно = = 2 8 – 1 = Диапазон изменения целых неотрицательных чисел от 0 до
4 ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ Представление в компьютере положительных чисел с использованием формата «знак-величина» называется прямым кодом числа. Старший (левый) разряд отводится под знак числа: 0 – положительное число, 1 – отрицательное число. Для хранения целых чисел со знаком отводится две ячейки памяти (16 битов). Для хранения больших целых чисел со знаком отводится четыре ячейки памяти (32 бита)
5 ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ Для n-разрядного представления со знаком (с учетом выделения одного разряда на знак): максимальное положительное число равно 2 n-1 – 1, минимальное отрицательное число равно – 2 n-1 Диапазон хранения целых чисел со знаком от – до Диапазон хранения больших целых чисел со знаком от – до А 10 = 2 15 – 1 = А 10 = – 2 15 = – А 10 = 2 31 – 1 = А 10 = – 2 31 = –
6 ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ 3 +(-3) =
7 ДОПОЛНИТЕЛЬНЫЙ КОД Для представления отрицательных чисел используется дополнительный код, позволяющий заменить арифметическую операцию вычитания операцией сложения. Дополнительный код представляет собой дополнение модуля числа А до 0. Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен 2 n – |А|. Это равенство тождественно справедливо, так как в компьютерной n-разрядной арифметике 2 n 0. Действительно, двоичная запись числа 2 n состоит из одной единицы и n нулей, а в n-разрядную ячейку может уместиться только n младших разрядов, т.е. n нулей. 2 8 = n – |А| + |А| = 0
8 ДОПОЛНИТЕЛЬНЫЙ КОД Найдём дополнительный код отрицательного числа – при n=16: 2n2n 2 16 = |А||А| = n – |А| | |= n – |А| |А||А| 1 2 n – |А| + |А| = 0 2 n – |А|
9 АЛГОРИТМ ПОЛУЧЕНИЯ ДОПОЛНИТЕЛЬНОГО КОДА Алгоритм получения дополнительного кода отрицательного числа: 1.Модуль числа записать прямым кодом в n двоичных разрядах. 2.Получить обратный код числа, для этого значения всех битов инвертировать. 3.К полученному обратному коду прибавить единицу. Прямой код | | Обратный кодИнвертирование Прибавление единицы Дополнительный код Найдём дополнительный код отрицательного числа – при n=16: +
10 ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКОГО ДЕЙСТВИЯ Выполнить арифметическое действие – в 16-разрядном компьютерном представлении Десятичное число Прямой кодОбратный кодДополнительный код – Дополнительный код
11 ПЕРЕВОД ДОПОЛНИТЕЛЬНОГО КОДА В ДЕСЯТИЧНОЕ ЧИСЛО В 16-разрядном компьютерном представлении – Переведем полученный дополнительный код в десятичное число: 1. Инвертируем дополнительный код: К полученному коду прибавим 1 (получим модуль отрицательного числа): Переведем в десятичное число и припишем знак отрицательного числа: -10
12 ПЕРЕВОД ДОПОЛНИТЕЛЬНОГО КОДА В ДЕСЯТИЧНОЕ ЧИСЛО В 16-разрядном компьютерном представлении – Переведем полученный дополнительный код в десятичное число: 1. Отнимем 1 от дополнительного кода: Инвертируем полученное число: Переведем в десятичное число и припишем знак отрицательного числа: -10 Почему не применяется данный метод перевода дополнительного кода в десятичное число?
13 ПРАКТИКУМ Задача. Найти минимальное отрицательное число в 8-разрядном компьютерном представлении Переведем дополнительный код в десятичное число: 1.Инвертируем дополнительный код: К полученному коду прибавим 1 (получим модуль отрицательного числа): Переведем в десятичное число и припишем знак отрицательного числа: -128 Для n-разрядного представления со знаком минимальное отрицательное число равно –2 n-1
14 ПРАКТИКУМ Задача. Найти максимальное отрицательное число в 8-разрядном компьютерном представлении Переведем дополнительный код в десятичное число: 1.Инвертируем дополнительный код: К полученному коду прибавим 1 (получим модуль отрицательного числа): Переведем в десятичное число и припишем знак отрицательного числа: -1
15 Выполняя на компьютере вычисления с целыми числами, нужно помнить об ограниченности диапазона допустимых значений. Выход результата за границы допустимого диапазона называется переполнением. Переполнение при вычислениях с целыми числами не вызывает прерывания работы процессора, но результаты могут оказаться неправильными. ОСОБЕННОСТИ РАБОТЫ С ЦЕЛЫМИ ЧИСЛАМИ
16 ПРАКТИКУМ Задача. Компьютер работает только с целыми числами, представленными в однобайтовой ячейке памяти. Какое значение будет получено в результате вычисления значения арифметического выражения ? Переведем в десятичное число и припишем знак отрицательного числа: Решение: Внутреннее представление числа 100: Внутреннее представление числа 39: Внутреннее представление суммы : Знаковый разряд равен 1, значит число отрицательное. Инвертируем код: Прибавим 1: Переполнение привело к неправильному результату!
17 ПРАКТИКУМ 1. Записать внутреннее представление следующих десятичных чисел, используя 8-разрядную ячейку:а) 64 б) -120 в) -96 г) 57 используя 16-разрядную ячейку:а) б) 6524 в) Определите, каким десятичным числам соответствуют следующие двоичные коды 8-разрядного представления целых чисел: а) б) в) г)
18 ЗАДАНИЕ НА ДОМ Учить: § (с ) Выполнить: 2.14 (с.147) и 2.15 (с.148)
Источник: http://www.myshared.ru/slide/656817
Организация однопроцессорных ЭВМ 2 > общие вопросы истории развития и построения ЭВМ 2
Сохрани ссылку в одной из сетей:
В ЭВМ в целях упрощения выполнения арифметических операций применяют специальные коды для представления чисел. При помощи этих кодов упрощается определение знака результата операции.
Операция вычитания (или алгебраического сложения) чисел сводится к арифметическому сложению кодов, облегчается выработка признаков переполнения разрядной сетки.
В результате упрощаются устройства ЭВМ, выполняющие арифметические операции.
Для представления чисел со знаком в ЭВМ применяют прямой, обратный и дополнительный коды.
Общая идея построения кодов такова. Код трактуется как число без знака, а диапазон представляемых кодами чисел без знака разбивается на два поддиапазона. Один из них представляет положительные числа, другой – отрицательные. Разбиение выполняется таким образом, чтобы принадлежность к поддиапазону определялась максимально просто.
Наиболее распространенным и удобным является формирование кодов таким образом, чтобы значение старшего разряда указывало на знак представляемых чисел, т.е. использование такого кодирования позволяет говорить о старшем разряде как о знаковом (бит знака) и об остальных как о цифровых разрядах кода.
2.6.1. Прямой код
Это обычный двоичный код, рассмотренный в разделе двоичной системы счисления. Если двоичное число является положительным, то бит знака равен 0, если двоичное число – отрицательное, то бит знака равен 1. Цифровые разряды прямого кода содержат модуль представляемого числа, что обеспечивает наглядность представления чисел в прямом коде (ПК).
Рассмотрим однобайтовое представление двоичного числа. Пусть это будет 28(10). В двоичном формате – 0011100(2) (при однобайтовом формате под величину числа отведено 7 разрядов). Двоичное число со знаком будет выглядеть так, как показано на рис. 2.1.
Рис. 2.1. Формат двоичного числа со знаком в прямом коде
а – положительное число; б – отрицательное
Сложение в прямом коде чисел, имеющих одинаковые знаки, достаточно просто: числа складываются, и сумме присваивается знак слагаемых. Значительно более сложным является алгебраическое сложение в прямом коде чисел с разными знаками.
В этом случае приходится определять большее по модулю число, производить вычитание модулей и присваивать разности знак большего по модулю числа. Такую операцию значительно проще выполнять, используя обратный и дополнительный коды.
2.6.2. Обратный код
В обратном коде (ОК), также как и в прямом коде, для обозначения знака положительного числа используется бит, равный нулю, и знака отрицательного – единице.
Обратный код отрицательного двоичного числа формируется дополнением модуля исходного числа нулями до самого старшего разряда модуля, а затем поразрядной заменой всех нулей числа на единицу и всех единиц на нули.
В знаковом разряде обратного кода у положительных чисел будет 0, а у отрицательных – 1.
На рис. 2.2 приведен формат однобайтового двоичного числа в обратном коде.
Рис. 2.2. Формат двоичного числа со знаком в обратном коде
а – положительное число; б – отрицательное
В общем случае ОК является дополнением модуля исходного числа до наибольшего числа без знака, помещенного в разрядную сетку.
Алгоритм формирования ОК очень прост, при этом ОК позволяет унифицировать операции сложения и вычитания в АЛУ, которые в прямом коде выполняются по-разному. Однако работа с ОК вызывает ряд трудностей.
В частности, возникают два нуля: +0 и -0, т.е. в прямом коде (в котором представлены положительные числа) имеет место (+0) = 000…0, а в обратном коде (в котором представлены отрицательные числа): (-0) = 111…
1.
Кроме того, в операциях сложения и вычитания требуется дополнительная операция по прибавлению бита переноса в младший разряд суммы. Рассмотрим правила алгебраического сложения в ОК (поскольку А-В=А+(-В)). Алгоритм сложения в ОК включает в себя:
- сложение кодов, включая знаковый разряд;
- прибавление переноса к МЗР (младшему значащему разряду) суммы.
Пример:
Вычислить выражение -3(10) -2(10).
Пример:
Вычислить 7(10) -3(10).
Указанные трудности привели к тому, что в современных ЭВМ абсолютное большинство операций выполняется в дополнительном коде.
2.6.3. Дополнительный код
Дополнительный код (ДК) строится следующим образом. Сначала формируется обратный код (ОК), а затем к младшему разряду (МЗР) добавляют 1.
При выполнении арифметических операций положительные числа представляются в прямом коде (ПК), а отрицательные числа – в ДК, причем обратный перевод ДК в ПК осуществляется аналогичными операциями в той же последовательности.
На рис. 2.3 рассмотрена цепь преобразований числа из ПК в ДК и обратно в двух вариантах.
Рис. 2.3. Два варианта преобразования чисел из ПК в ДК и обратно
Пример:
Число -5(10) перевести в ДК и обратно (первый вариант).
Пример:
Число -5(10) перевести в ДК и обратно (второй вариант).
Использование ДК для представления отрицательных чисел устраняет двусмысленное представление нулевого результата (возникновение двух нулей: +0 и -0), так как -0 исчезает.
В общем случае использованием ДК для записи отрицательных чисел можно перекрыть диапазон десятичных чисел от –2k-1 до +2k-1-1, где k – число используемых двоичных разрядов, включая знаковый.
Так, с помощью одного байта можно представить десятичные числа от -128 до +127, либо только положительные числа от 0 до 255 (здесь под положительными числами понимаются числа без знака). В табл.1 приведены 4-разрядные двоичные числа от 0000 до 1111 и десятичные числа в случае представления их со знаком и без знака.
Из этой таблицы следует, что в формате 4-разрядного двоичного числа могут быть представлены десятичные числа со знаком в диапазоне от -8 до +7 или десятичные числа без знака в диапазоне от 0 до +15.
Оба этих способа представления чисел (со знаком и без знака) широко используются в ЭВМ.
Таблица 1
Представление десятичных чисел одним полубайтом
4-х разрядноедвоичное число | десятичные эквиваленты двоичного числа со знаком | десятичные эквиваленты двоичного числа без знака |
0000 | +0 | |
0001 | +1 | 1 |
. . . . ПК | . . . | . . . |
0110 | +6 | 6 |
0111 | +7 | 7 |
1000 | -8 | 8 |
1001 | -7 | 9 |
1010 | -6 | 10 |
. . . . ДК | . . . | . . . |
1110 | -2 | 14 |
1111 | -1 | 15 |
В ЭВМ используется быстрый способ формирования ДК. Его суть заключается в следующем. Двоичное число в ПК просматривается от МЗР к СЗР. Пока встречаются нули, их копируют в одноименные разряды результата. Первая встретившаяся единица также копируется в соответствующий разряд, а каждый последующий бит исходного числа заменяется на противоположный (0 – на 1, 1 – на 0).
Пример:
Число –44(10) (10101100 (2)) перевести в ДК и обратно.
Проверка:
Пример:
Перевести в ДК модуль числа -44.
Как видно из примеров, результаты, полученные при преобразовании обоими методами, совпадают.
2.6.4. Сложение и вычитание в дополнительном коде
При выполнении арифметических операций в современных ЭВМ используется представление положительных чисел в прямом коде (ПК), а отрицательных – в обратном (ОК) или в дополнительном (ДК) кодах. Это можно проиллюстрировать схемой на рис. 2.4.
Рис. 2.4. Представление чисел в ЭВМ:
а) – положительное число; б) – отрицательное число
Общее правило. При алгебраическом сложении двух двоичных чисел, представленных обратным (или дополнительным) кодом, производится арифметическое суммирование этих кодов, включая разряды знаков.
При возникновении переноса из разряда знака единица переноса прибавляется к МЗР суммы кодов при использовании ОК и отбрасывается при использовании ДК.
В результате получается алгебраическая сумма в обратном (или дополнительном) коде.
Рассмотрим подробнее алгебраическое сложение для случая представления отрицательных чисел в ДК.
При алгебраическом сложении чисел со знаком, результатом также является число со знаком. Суммирование происходит по всем разрядам, включая знаковые, которые при этом рассматриваются как старшие. При возникновении переноса из старшего разряда единица переноса отбрасывается и возможны два варианта результата:
- знаковый разряд равен нулю: результат – положительное число в ПК;
- знаковый разряд равен единице: результат – отрицательное число в ДК.
Для определения абсолютного значения результата, его необходимо инвертировать, затем прибавить единицу.
Пример:
Вычислить алгебраическую сумму 58 – 23.
Пример:
Вычислить алгебраическую сумму 26 – 34.
Пример:
Вычислить алгебраическую сумму -5 – 1.
2.6.5. Признак переполнения разрядной сетки
При алгебраическом суммировании двух чисел, помещающихся в разрядную сетку, может возникнуть переполнение, то есть образуется сумма, требующая для своего представления на один двоичный разряд больше, чем разрядная сетка слагаемых. Предполагается, что положительные числа представляются в прямом коде, а отрицательные в дополнительном.
Признаком переполнения является наличие переноса в знаковый разряд суммы при отсутствии переноса из знакового разряда (положительное переполнение) или наличие переноса из знакового разряда суммы при отсутствии переноса в знаковый разряд (отрицательное переполнение).
При положительном переполнении результат операции положительный, а при отрицательном переполнении – отрицательный.
Если и в знаковый, и из знакового разряда суммы есть переносы или этих переносов нет, то переполнение отсутствует.
Рассмотрим простейшие примеры с трехбитовыми словами. Диапазон чисел, которые они представляют, равен от -4 до +3. В рассматриваемых словах 1 бит знака и 2 информационных бита.
1. Алгебраическое суммирование без переноса.
Так как перенос в знаковый разряд или из знакового разряда суммы отсутствует, то переполнения нет.
Результат – положительное число в ПК, равное 3.
2. Алгебраическое суммирование с двумя переносами.
Имеются переносы в знаковый разряд и из знакового разряда вычисляемой суммы, поэтому переполнения нет.
Результат – отрицательное число в ДК, равное – 4.
3. Алгебраическое суммирование с одним переносом.
(Положительное переполнение).
При суммировании есть перенос в знаковый разряд суммы, а перенос из знакового разряда отсутствует. Т.е. имеет место положительное переполнение и результат операции положительный.
Число 4 нельзя представить в прямом коде. Формальный результат равен -4.
4. Алгебраическое суммирование с одним переносом.
(Отрицательное переполнение).
Число -5 нельзя представить 3-битовой комбинацией. Формальный результат равен +3.
Из рассмотренных ранее примеров видно, что арифметические операции в дополнительном коде выполняются достаточно просто. Необходимо только не упускать из виду то, с какими числами происходит работа в данный момент – без знака или со знаком. Поскольку внешний вид обоих чисел одинаков, возможны ошибки.
2.6.6. Деление в дополнительном коде
Деление в дополнительном коде осуществляется по тем же правилам, что были описаны в пункте 5.4. раздела “Двоичная арифметика”. Но обычный метод деления “столбиком” для ЭВМ не пригоден. Для ЭВМ используются более громоздкие методы деления, которые здесь не рассматриваются. Информацию о них можно найти в литературе, приведенной в конце главы.
2.6.7. Правило перевода из дополнительного кода в десятичную систему
Перевод чисел из дополнительного кода в десятичную систему можно проводить по схеме, приведенной на рис. 2.5.
Рис. 2.5. Схема перевода из ДК в десятичную систему
Однако существует прямой способ перевода числа из ДК в десятичную систему без использования промежуточного перевода в ПК.
Рассмотрим машинное слово произвольной длины (рис. 2.6). При прямом способе перевода десятичное число со знаком формируется как сумма разрядов со своими весами и знаками (старший N-й разряд имеет отрицательный вес).
Рис. 2.6. Машинное слово длиной N
Проиллюстрируем перевод чисел из ДК в десятичную систему счисления примерами.
Пример:
Перевести число 1110 из ДК в десятичную систему.
Можно проверить правильность перевода, используя промежуточный перевод числа в ПК:
Пример:
Перевести число 101100 из ДК в десятичную систему.
101100(2) (ДК) = -25+23+22 = -32+8+4 = -20(10)
Проверим:
2.6.8. Модифицированные коды
Эти коды отличаются от прямого, обратного и дополнительного кодов тем, что на изображение знака отводится два разряда: если число положительное – 00, если число отрицательное – 11.
Такие коды оказались удобны (с точки зрения построения АЛУ) для выявления переполнения разрядной сетки.
Если знаковые разряды результата принимают значение 00 и 11, то переполнения разрядной сетки не было, а если 01 или 10 – то было переполнение. Вернемся к примерам в п.п. 2.6.5.
Следует иметь ввиду, что в предыдущих разделах рассмотрены только основные принципы выполнения арифметических операций, из которых видно, что все арифметические операции с двоичными числами могут быть сведены к двум операциям – операциям суммирования двоичных чисел в прямом или дополнительном кодах, а также операциям сдвига двоичного числа вправо или влево. Реальные алгоритмы выполнения операций умножения и деления в современных ЭВМ достаточно громоздки и здесь не рассматриваются.
2.6.9. Арифметика повышенной точности
Проблема точности возникает, как правило, при работе с микро- и мини-ЭВМ, имеющих небольшую длину машинного слова (1-2 байта). Рассмотрим микропроцессор, работающий со словами длины 1 байт. Этот формат позволяет представить целые числа в диапазоне от -128 до 127.
Очевидно, что для решения большинства задач такого диапазона чисел недостаточно. Использование двух однобайтовых слов (16 бит) позволяет представить уже числа в диапазоне от -32768 до 32767. Это так называемые числа с двойной точностью. Иногда используются числа тройной точности (1 бит – знак и 23 бита для модуля числа).
Это обеспечивает диапазон уже от -8388608 до 8388607, т.е. точность существенно повышается.
Однако при работе с арифметикой повышенной точности требуется больший объем памяти для хранения того же объема данных и более интенсивная работа процессора. Увеличение объема требуемой памяти достаточно очевидно.
Рассмотрим очень коротко последовательность операций при сложении чисел с тройной точностью. Здесь уже недостаточно извлечь два слова из памяти, сформировать сумму в аккумуляторе и переслать результат в однобайтовую ячейку памяти.
Сначала необходимо произвести обращение к младшему значащему байту каждого числа. После сложения результат записывается в память, а возможные при этом переносы подлежат временному хранению.
Затем извлекаются средние по значимости байты, их складывают и к сумме добавляют биты переноса, полученные в результате предыдущей операции. Результат записывается в память на место, специально зарезервированное для среднего байта суммы. Со старшим байтом поступают аналогично.
Таким образом, при использовании арифметики тройной точности требуется в три раза больше объем памяти и время на операции сложения по сравнению с арифметикой одинарной точности. Кроме того, в случае возникновения прерываний, необходимо временно хранить содержимое регистра переносов. (То же самое для вычитания, умножения и деления).
Источник: https://gigabaza.ru/doc/85775-p4.html
Арифметика в дополнительном коде
Источник: https://poisk-ru.ru/s59206t1.html
Урок на тему “Представление чисел в формате фиксированной запятой”
Тема урока:Представление чисел в формате с фиксированной запятой
Цель урока. Углубить знания учащихся о представлении чисел в формате с фиксированной запятой в памяти компьютера.
ЦОР: презентация «Представление чисел в формате с фиксированной запятой»
Ход урока:
Организационный момент:
Приветствие учащихся, проверка явки, объявление темы и цели урока.
Объяснение нового материала(с использованием презентации)
Ребята, на прошлых уроках мы познакомились с представлением чисел в различных системах счисления, переводом чисел из одной системы счисления в другую. Вы научились выполнять арифметические операции в различных позиционных системах счисления.
А как представляются числа в памяти компьютера? Есть ли отличия в машинном выполнении арифметических операций?
Сегодня мы попробуем разобраться в этих вопросах применительно к целым числам.
Тема урока: Представление чисел в формате с фиксированной запятой
Изучаемые вопросы:
-
-
Представление целых чисел в памяти компьютера.
-
Представление отрицательных чисел в памяти компьютера.
-
Размер ячейки и диапазон значений чисел.
-
Особенности работы компьютера с целыми числами.
-
Целые числа в компьютере хранятся в памяти в формате с фиксированной запятой. Вэтом случае каждому разряду ячейки памяти соответствует всегда один и тот же разряд числа, а запятая находится справа после младшего разряда, т. е. вне разрядной сетки.
Достоинствами представления чисел в формате с фиксированной запятой являются простота и наглядность представления чисел, а также простота алгоритмов реализации арифметических операций (вычитание благодаря использованию дополнительного кода для представления отрицательных чисел сводится к сложению).
Недостатком представления чисел в формате с фиксированной запятой является конечный диапазон представления величин, недостаточный для решения математических, физических, экономических и других задач, в которых используются как очень малые, так и очень большие числа.
Целые неотрицательные числа. Для хранения целых неотрицательных чисел отводится одна ячейка памяти (8 битов).
Минимальное число соответствует восьми нулям, хранящимся в восьми ячейках памяти, и равно нулю.
Максимальное значение целого неотрицательного числа достигается в случае, когда во всех ячейках хранятся единицы. Для n-разрядного представления оно будет равно
2n – 1.
Определим диапазон чисел, которые могут храниться в оперативной памяти в формате целого неотрицательного числа.
Минимальное число равно 0.
Максимальное число соответствует восьми единицам, хранящимся в ячейках памяти, и равно:
А = 1·27 +1·26 +1·25 + 1·24 + 1·23 + 1·22 + 1·21 + 1·2° = 1·28 – 1 = 25510.
Диапазон изменения целых неотрицательных чисел – от 0 до 255.
Целые числа со знаком. Для хранения целых чисел со знаком отводится две ячейки памяти (16 битов), а для хранения больших целых чисел со знаком отводится четыре ячейки памяти (32 бита). Старший (левый) разряд отводится под знак числа (если число положительное, то в знаковый разряд записывается 0, если число отрицательное — записывается 1).
Представление в компьютере положительных чисел с использованием формата «знак-величина» называется прямым кодом числа.
При представлении целых чисел в n-разрядном представлении со знаком максимальное положительное число (с учетом выделения одного разряда на знак) равно
А = 2n-1 – 1.
Минимальное отрицательное число равно А = -2n–1.
Определиv диапазон чисел, которые могут храниться в оперативной памяти в формате:
-
целых чисел со знаком;
-
больших целых чисел со знаком.
а) Максимальное положительное целое число в формате целых чисел со знаком равно:
А10 = 215 – 1 = 32 76710.
Минимальное отрицательное целое число равно
А10 = -215 = -3276810.
б) Максимальное положительное целое число в формате больших целых чисел со знаком равно
А10 = 231 – 1 = 2 147 483 64710.
Минимальное отрицательное целое число равно
А10 = -231 = -2 147 483 64810.
А как представляются отрицательные числа в памяти компьютера? Достаточно ли только в старшем разряде, выделенном для хранения знака, указать 1?
Проверим на простом примере 3+(-3)=0.
Дополнительный код. Для представления отрицательных чисел используется дополнительный код. Дополнительный код позволяет заменить арифметическую операцию вычитания операцией сложения, что существенно упрощает работу процессора и увеличивает его быстродействие.
Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен 2n – |А|
Дополнительный код представляет собой дополнение модуля отрицательного числа А до 0, поэтому в n-разрядной компьютерной арифметике:
2n – |А| + |А| = 0.
Это равенство тождественно справедливо, так как в компьютерной n-разрядной арифметике 2n ≡ 0. Действительно, двоичная запись такого числа состоит из одной единицы и п нулей, а в n-разрядную ячейку может уместиться только п младших разрядов, т. е. п нулей.
Задание. Найдем дополнительный код отрицательного числа -2002 для 16-разрядного компьютерного представления.
Проведем вычисления в соответствии с определением дополнительного кода:
216
=
100000000000000002
6553610
200210
=
00000111110100102
200210
216- |200210|
=
11111000001011102
6353410
Проведем проверку с использованием десятичной системы счисления. Дополнительный код 63 53410 в сумме с модулем отрицательного числа 200210 равен 6553610, т. е. дополнительный код дополняет модуль отрицательного числа до 216 (до нуля 16-разрядной компьютерной арифметики).
Алгоритм получения дополнительного кода.
Для получения дополнительного кода отрицательного числа можно использовать довольно простой алгоритм:
-
Модуль числа записать прямым кодом в п двоичных разрядах.
-
Получить обратный код числа, для этого значения всех битов инвертировать (все единицы заменить на нули и все нули заменить на единицы).
-
К полученному обратному коду прибавить единицу.
Задание «Вычисление дополнительного кода числа с использованием обратного кода». Вычислить дополнительный код отрицательного числа -2002 для 16-разрядного компьютерного представления с использованием алгоритма.
Прямой код
|-2002|
Обратный код
Инвертирование
Прибавление единицы
Дополнительный код
Задание «Арифметическое действие». Выполнить арифметическое действие 2010– 3010в 16-разрядном компьютерном представлении.
Представим положительное число в прямом, а отрицательное число — в дополнительном коде:
Десятичное число
Прямой код
Обратный код
Дополнительный код
20
-30
Сложим прямой код положительного числа с дополнительным кодом отрицательного числа. Получим результат в дополнительном коде:
2010 – 3010 11111111 111101102
Переведем полученный дополнительный код в десятичное число:
-
Инвертируем дополнительный код: 00000000 00001001.
-
Прибавим к полученному коду 1 и получим модуль отрицательного числа: 00000000 00001010
3) Переведем в десятичное число и припишем знак отрицательного числа: -10.
Вспомним алгоритм получения дополнительного кода:
-
Модуль числа записать прямым кодом в п двоичных разрядах.
-
Получить обратный код числа, для этого значения всех битов инвертировать (все единицы заменить на нули и все нули заменить на единицы).
-
К полученному обратному коду прибавить единицу.
Если выполнить этот алгоритм в обратном порядке, то тоже сможем перевести полученный дополнительный код в десятичное число.
Вопрос. Почему не применяется данный метод перевода дополнительного кода в десятичное число?
Ожидаемый ответ. Замена операции вычитания операцией сложения существенно упрощает работу процессора и увеличивает его быстродействие.
Задача. Найти минимальное отрицательное число в 8-разрядном компьютерном представлении
Переведем дополнительный код 1000000 в десятичное число:
-
Инвертируем дополнительный код: 01111111
-
К полученному коду прибавим 1 (получим модуль отрицательного числа): 10000000
-
Переведем в десятичное число и припишем знак отрицательного числа: -128
Задача. Найти максимальное отрицательное число в 8-разрядном компьютерном представлении
Переведем дополнительный код 11111111 в десятичное число:
-
Инвертируем дополнительный код: 00000000
-
К полученному коду прибавим 1 (получим модуль отрицательного числа): 00000001
-
Переведем в десятичное число и припишем знак отрицательного числа: -1
Выполняя на компьютере вычисления с целыми числами, нужно помнить об ограниченности диапазона допустимых значений.
Выход результата за границы допустимого диапазона называется переполнением.
Переполнение при вычислениях с целыми числами не вызывает прерывания работы процессора, но результаты могут оказаться неправильными.
Задача. Компьютер работает только с целыми числами, представленными в однобайтовой ячейке памяти. Какое значение будет получено в результате вычисления значения арифметического выражения 100+39?
Результат: 10001011 – т.е. число отрицательное
Инвертируем: 01110100
Прибавляем 1: 01110101
Переводим в десятичное число, приписывая знак отрицательного числа: -117
Переполнение привело к неправильному результату!
Практикум (у интерактивной доски работает один ученик, остальные самостоятельно)
1. Записать внутреннее представление следующих десятичных чисел,
-
-
используя 8-разрядную ячейку: а) 64 б) -120 в) -96 г) 57
-
а)
1
б)
1
1
в)
1
1
г)
1
1
1
1
а) 64 = 0100 0000
б) -120|-120|=01111000 10000111 + 1 = 10001000
в) -96|-96|=01100000 10011111 + 1 = 10100000
г) 57 = 0011 1001
-
-
используя 16-разрядную ячейку: д) -15098 е) 6524 ж) -28987
-
д)
1
1
1
1
1
1
е)
1
1
1
1
1
1
1
1
ж)
1
1
1
1
1
1
1
1
д) -15098|-15098|=0011 1010 1111 1010 1100010100000101 + 1 = 1100010100000110
е) 6524 = 0001 1001 0111 1100
ж) -28987|-28987|=0111 0001 0011 1011 1000111011000100 + 1 = 1000111011000101
2. Определите, каким десятичным числам соответствуют следующие двоичные коды 8-разрядного представления целых чисел: а) 00100111 б) 11001110 в) 10101010 г) 01111110
а) 00100111 = 32+4+2+1 = 41
б) 11001110 00110001+1=00110010 32+16+2 = 50-50
в) 1010101001010101+1=01010110 64+16+4+2 = 86-86
г) 01111110 = 64+32+16+8+4+2= 126
Подведение итогов урока
-
Дать общую характеристику работы класса.
-
Показать успешность овладения содержанием урока.
-
Вскрыть недостатки, показать пути их преодоления.
-
Выставление оценок
Домашнее задание:
Учить: § 2.10.1 (с.143-148)
Выполнить: №1(в,г,е,ж), №2(в,г), №2.14 (с.147) и №2.15 (с.148)
Источник: https://infourok.ru/urok-na-temu-predstavlenie-chisel-v-formate-fiksirovannoy-zapyatoy-652637.html
Adblockdetector