Все процессоры с ФТ оперируют с числами, представленными в дополнительном коде, что позволяет существенно упростить выполнение арифметических операций.
Положительные целые числа представляются в дополнительном коде точно так же, как в прямом коде. Формирование дополнительного кода отрицательного числа производится по следующему правилу:
значение знакового бита не меняется (равно 1);
все b значащих битов инвертируются (0 заменяются на 1,а 1 – на 0);
к младшему биту полученного числа прибавляется 1 с соблюдением правил сложения двоичных
Результат представляет собой число в дополнительном коде. Правило перевода в дополнительный код не зависит от типа чисел – целые или дробные.
Примеры перевода из прямого кода в дополнительный представлены на рис. 3.8 и 3.9.
а) положительное целое
б) отрицательное целое
формирование дополнительного кода:
инверсия всех битов, кроме знакового: 10010010
добавление 1 к младшему биту: 10010011
Рис. 3. 8. Примеры целых чисел в дополнительном коде
Обратный перевод числа из дополнительного кода в прямой осуществляется точно по тому же правилу.
Приведем пример. Пусть дано число в дополнительном коде: 10010011доп (жирным шрифтом выделен знаковый бит). Формирование прямого кода:
инверсия всех битов, кроме знакового __ >11101100;
добавление 1 к младшему биту _ >11101101пр.
Код называется дополнительным, поскольку отрицательное дробное число можно представить как разность между числом 2 (беззнаковым целым) и модулем этого числа, т.е. как дополнение к 2. В качестве примера, получим дополнительный код отрицательного числа _ _0,875, как его дополнения к 2. Модуль этого числа в формате Q3 равен 0,111(2). Вычитая 0,111(2) из числа 2(10) = 10,000(2) имеем результат 1,001(2). Определим дополнительный код числа _ 0,875 по приведенному выше правилу:
_ 0, 875 _ > _ 0,111(2) _ >1111пр _ > инверсия всех битов, кроме знакового _ >1000 добавление 1 в младшему биту _ >1001доп. _______
б) отрицательное дробное
Формирование дополнительного кода:
инверсия всех битов, кроме знакового: 10001110
добавление 1 к младшему биту: 10001111
Рис. 3. 9.Примеры дробных чисел в дополнительном коде
На рис.3.10 указаны веса битов и приведено правило вычисления десятичного эквивалента, соответствующего двоичному целому числу в дополнительном коде.
На рис.3.11 указаны веса битов и приведено правило вычисления десятичного эквивалента, соответствующего двоичному дробному числу в дополнительном коде.
Сравнивая рис.3.10 и 3.11, еще раз подчеркнем, что одинаковое представление чисел с ФТ может иметь разную трактовку типа чисел, а следовательно, соответствовать разным числам.
Приводимые правила нетрудно распространить на любой формат.
Наряду с простотой выполнения арифметических операций (см. далее), в дополнительном коде устраняется неоднозначность представления нуля.
Ноль в прямом коде может быть представлен и как 0000. 0 и как 1000. 0, а в дополнительном коде только как 0000. 0. Это легко проверить, вычислив для чисел, представленных в дополнительном коде, их десятичные эквиваленты:
_ 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0
б) дополнительный код
положительного целого числа
(2 6 + 2 4 + 2 2 + 2 0 ) = 83
в) дополнительный код
отрицательного целого числа
_ 2 7 + 2 5 + 2 3 + 2 2 = _ 84
Рис. 3.10.Десятичный эквивалент двоичного целого числа в дополнительном коде
б) дополнительный код
положительного дробного числа
в) дополнительный код
отрицательного дробного числа
Рис.3. 11.Десятичный эквивалент двоичного дробного числа в дополнительном коде
На рис. 3.12 приведены примеры максимальных и минимальных по модулю значений для положительного и отрицательного целых чисел в дополнительном коде в формате “слово” длиной 8 битов и их десятичные эквиваленты. Десятичные эквиваленты целых чисел для формата “слово” длины n битов (где n = b+1, b _ количество значащих битов) равны:
2 b _ 1 _ максимальное положительное;
1 _ минимальное положительное;
_ 2 b _ максимальное по модулю отрицательное;
_ 1 _ минимальное по модулю отрицательное.
а) максимальное положительное
б) минимальное положительное целое число
в) максимальное по модулю
отрицательное целое число
г) минимальное по модулю
отрицательное целое число
Рис. 3. 12.Максимальные и минимальные целые числа в дополнительном коде
На рис. 3.13 приведены примеры максимальных и минимальных значений для положительного и отрицательного дробных чисел в дополнительном коде в формате Q7 и их десятичные эквиваленты. Десятичные эквиваленты дробных чисел в формате Qb длины равны:
1 _ 2 – b _ максимальное положительное;
2 – b _ минимальное положительное;
_ 1 _ максимальное по модулю отрицательное;
_ 2 – b _ минимальное по модулю отрицательное.
а) максимальное положительное
б) минимальное положительное
в) максимальное по модулю
отрицательное дробное число
г) минимальное по модулю
отрицательное дробное число
Рис. 3. 13.Максимальные и минимальные дробные числа в дополнительном коде
Для чисел, представленных в дополнительном коде, старший разряд остается знаковым.
Трактовка типа чисел, представленных в дополнительном коде в формате ”слово”, весьма важна при сохранении этих чисел в форматах “двойное слово” и “расширенное слово”. Рассмотрим два примера.
Пример 1.Число, представленное в дополнительном коде в формате “слово” длиной 8 битов (n = 8), сохраняется в формате “двойное слово” длиной 2n (рис.3.14).
В зависимости от типа данных выполняются следующие действия:
для целых чисел (рис.3.14, а):
число (со знаком) в дополнительном коде сохраняется в младшем слове LSP с выравниванием по правому краю;
в старшем слове MSP и в ”лишних” старших битах младшего слова LSP происходит расширение знака;
знаковым становится старший бит MSB слова MSP : LSP;
для дробных чисел (рис. 3.14, б):
число (со знаком) в дополнительном коде сохраняется в старшем слове MSP с выравниванием по левому краю;
знаковым становится старший бит MSB слова MSP : LSP;
биты младшего слова LSP и “лишние” младшие биты старшего слова MSP заполняются нулями.
Пример 2.Число, представленное в дополнительном коде в формате “слово” длиной 8 битов (n = 8) сохраняется в формате “расширенное слово” длиной k = 20. Независимо от типа данных выполняются следующие действия (рис.3.15, а, б):
число (со знаком) в дополнительном коде размещается в слове MSP:LSP (см. выше);
в расширении EXT происходит расширение знака;
знаковым становится старший бит MSB слова EXT: MSP: LSP.
Из приведенных примеров видно, что расширение знака числа, представленного в дополнительном коде, не меняет его значения (см. десятичные эквиваленты на рис.3.14 и 3.15).Это преимущество дополнительного кода используется, в частности, в операциях пересылок данных, когда изменяется формат их представления (см.разд.3.7.10).
В заключение отметим, что непосредственно в процессоре преобразование кодов из прямого в дополнительный и обратно не производится. Оно выполняется на языке ассемблера на этапе трансляции программы.
Мы будем изучать эти коды, т.к. в ЭВМ нет операции вычитания, и она заменяется операцией сложения с обратным кодом.
Прямым кодом целого двоичного числа Х будет называться число, образованное по формуле:
Прямым кодом дробного двоичного числа X будет называться число, образованное по формуле:
Обратным кодом целого двоичного числа X называется число, образованное по формуле:
Обратным кодом дробного двоичного числа X называется число, образованное по формуле:
Правило: Чтобы получить обратный код двоичного целого числа, в знаковый разряд нужно поставить 1, а значащие разряды проинвертировать (0 заменить 1,а 1 заменить 0).
Знаковый разряд Значащие разряды
A = 0.0100 +4 прямой код;
Для положительных чисел прямой и обратный коды совпадают.
Если возникает единица переноса из знакового разряда, то она прибавляется к младшему разряду.
Если в знаковом разряде получается 0, то это означает, что результат положительный и представлен в прямом коде.
Если в знаковом разряде результата 1, то это означает, что результат отрицательный и представлен в обратном коде.
Для получения прямого кода необходимо в знаковом разряде оставить 1, а значащие разряды проинвертировать (по правилу полинома можно переводить в десятичную систему счисления только прямой код числа).
0.0101 +5 прямой код 0.0100 +4 прямой код
+
0.0101 +5 прямой код
0.0100 +4 прямой код
0.1001 +9 прямой код
+
0.0101 +5 прямой код
1 0.0000
+1
Знаковый разряд результата равен 0. Из этого следует, что результат положительный и представлен в прямом коде.
+
0.0100 +4 прямой код
1.1110
Знаковый разряд результата равен 1. Следовательно, результат получился отрицательным и представлен в обратном коде. Прямой код результата равен:
Дополнительным кодом целого двоичного числа называется число, образованное по формуле:
Дополнительным кодом дробного двоичного числа называется число, образованное по формуле:
Правило: Чтобы получить дополнительный код двоичного отрицательного числа необходимо в знаковый разряд поставить 1, все значащие разряды проинвертировать и к младшему разряду прибавить 1.
Это применимо как для целых так и для дробных чисел.
А=5, В=4
Для положительных чисел прямой и дополнительный коды совпадают.
Правило: Чтобы выполнить алгебраическое суммирование двоичных чисел с использованием дополнительного кода, положительные числа представляются в прямом коде, отрицательные – в дополнительном, и производится суммирование кодов чисел, включая знаковые разряды.
Если возникает единица переноса из знакового разряда, то она отбрасывается.
Если в знаковом разряде 1, значит результат отрицательный и представлен в дополнительном коде.
Чтобы получить прямой код результата, необходимо в знаковом разряде оставить 1, значащие разряды проинвертировать, к младшему разряду прибавить 1.
0.0101 +5 прямой код
0.0001 +1 прямой код
Если образовался “0” в знаковом разряде, то число получилось положительным и представлено в прямом коде, а если “1”, то это число отрицательное и представлено в дополнительном коде.
+
0.0100 +4 прямой код
Знаковый разряд результата равен 1. Из этого следует, что результат получился отрицательным и представлен в дополнительном коде. Прямой код результата равен:
Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все.
Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор.
ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры.
Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право.
Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
Прямой, дополнительный и обратный код числа (создан по запросу).
Далее идет калькулятор, который переводит введенное положительное или отрицательное целое число в двоичный код, а также выводит обратный код этого числа и его дополнительный код. Под калькулятором, как водится, немного теории.
Обновление: Из комментариев становится ясно, что люди не вполне понимают, что делает этот калькулятор. Точнее, что делал — применял алгоритм вычисления дополнительного кода к любому числу. Люди хотят, чтобы он им просто показывал дополнительный код числа. Ну хорошо — теперь при вводе положительного числа калькулятор показывает представление числа в двоичной форме, ибо для него нет обратного и дополнительного кода, а при вводе отрицательного показывает дополнительный и обратный код.
Прямой, дополнительный и обратный код
Прямой код числа это представление беззнакового двоичного числа. Если речь идет о машинной арифметике, то как правило на представление числа отводится определенное ограниченное число разрядов. Диапазон чисел, который можно представить числом разрядов n равен
Обратный код числа, или дополнение до единицы (one’s complement) это инвертирование прямого кода (поэтому его еще называют инверсный код). То есть все нули заменяются на единицы, а единицы на нули.
Дополнительный код числа, или дополнение до двойки (two’s complement) это обратный код, к младшему значащему разряду которого прибавлена единица
Для различия положительных и отрицательных чисел выделяют старший разряд числа, который называется знаковым (sign bit) 0 в этом разряде говорит нам о том, что это положительное число, а 1 — отрицательное.
С положительными числами все вроде бы понятно, для их представления можно использовать прямой код 0 — 0000 1 — 0001 7 — 0111
А как представить отрицательные числа?
И это оказалось очень удобно для машинных вычислений — при таком представлении отрицательного числа операции сложения и вычитания можно реализовать одной схемой сложения, при этом очень легко определять переполнение результата (когда для представления получившегося числа не хватает разрядности)
Пара примеров 7-3=4 0111 прямой код 7 1101 дополнительный код 3 0100 результат сложения 4
-1+7=6 1111 дополнительный код 1 0111 прямой код 7 0110 результат сложения 6
Что касается переполнения — оно определяется по двум последним переносам, включая перенос за старший разряд. При этом если переносы 11 или 00, то переполнения не было, а если 01 или 10, то было. При этом, если переполнения не было, то выход за разряды можно игнорировать.
Примеры где показаны переносы и пятый разряд
00111 прямой код 7 00001 прямой код 1 01110 переносы 01000 результат 8 — переполнение
Два последних переноса 01 — переполнение
-7+7=0 00111 прямой код 7 01001 дополнительный код 7 11110 переносы 10000 результат 16 — но пятый разряд можно игнорировать, реальный результат 0
Два последних переноса 11 з перенос в пятый разряд можно отбросить, оставшийся результат, ноль, арифметически корректен. Опять же проверять на переполнение можно простейшей операцией XOR двух бит переносов.
Вот благодаря таким удобным свойствам дополнительный код это самый распространенный способ представления отрицательных чисел в машинной арифметике.
Пример перевода x1=10101-[x1]пр=010101 x2=-11101-[x2]пр=111101 x3=0,101-[x3]пр=0,101 x4=-0,111-[x4]пр=1,111 2) Обратный код числа, используется для выполнения арифметических операций вычитания, умножения, деления, через сложение. Обратный код положительного числа совпадает с его прямым кодом, обратный код отрицательного числа формируется по правилам: в знаковом разряде записывается “1”; цифровые значения меняются на противоположные.
3) Дополнительный код числа, имеет такое же назначение, как и обратный код числа. Формируется по следующим правилам: положительные числа в дополнительном коде выглядят также как и в обратном и в прямом коде, т.е. не изменяются. Отрицательные числа кодируются следующим образом: к обратному коду отрицательного числа (к младшему разряду) добавляется 1, по правилу двоичной арифметики.
Пример перевода x1=10101-[x1]доп=010101 x2=-11101-[x2]обр=100010+1-[x2]доп=100011 x3=0,101-[x3]доп=0,101 x4=-0,111-[x4]обр=1,000+1-[x4]доп=1,001 Для выявления ошибок при выполнении арифметических операций используются также модифицированные коды: модифицированный прямой; модифицированный обратный; модифицированный дополнительный, для которых под код знака числа отводится два разряда, т.е. “+”=00; ”-”=11. Если в результате выполнения операции в знаковом разряде появляется комбинация 10 или 01 то для машины это признак ошибки, если 00 или 11 то результат верный.
Прямой, обратный и дополнительный коды двоичного числа
Прямой код двоичного числа Обратный код двоичного числа Дополнительный код двоичного числа
Мы знаем, что десятичное число можно представить в двоичном виде. К примеру, десятичное число 100 в двоичном виде будет равно 1100100, или в восьмибитном представлении 0110 0100. А как представить отрицательное десятичное число в двоичном виде и произвести с ним арифметические операции? Для этого и предназначены разные способы представления чисел в двоичном коде. Сразу отмечу, что положительные числа в двоичном коде вне зависимости от способа представления (прямой, обратный или дополнительный коды) имеют одинаковый вид.
Прямой код
Обратный код
Для неотрицательных чисел обратный код двоичного числа имеет тот же вид, что и запись неотрицательного числа в прямом коде. Для отрицательных чисел обратный код получается из неотрицательного числа в прямом коде, путем инвертирования всех битов (1 меняем на 0, а 0 меняем на 1). Для преобразования отрицательного числа записанное в обратном коде в положительное достаточного его проинвертировать.
Арифметические операции с отрицательными числами в обратном коде:
Дополнительный код
В дополнительном коде (как и в прямом и обратном) старший разряд отводится для представления знака числа (знаковый бит).
Арифметические операции с отрицательными числами в дополнительном коде
Вывод: 1. Для арифметических операций сложения и вычитания положительных двоичных чисел наиболее подходит применение прямого кода 2. Для арифметических операций сложения и вычитания отрицательных двоичных чисел наиболее подходит применение дополнительного кода