Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ФЭВМ (основная часть).doc
Скачиваний:
16
Добавлен:
22.04.2019
Размер:
8.11 Mб
Скачать

3.2.2Представление отрицательных чисел

3.2.2.1Представление отрицательных чисел в дополнительном коде

3.2.2.1.1Сущность дополнительного кода.

Будем считать, что у нас имеется 4 двоичных разряда для представления целых чисел. Целые неотрицательные числа от 0 до 15 (т.е.16 чисел) представляются в двоичном виде известным способом. Вопрос: как представлять отрицательные? Какой выбрать для них интервал? Вполне естественной является идея использовать интервал [-8,7]. Как же представляются эти числа в двоичном виде?

Hеотрицательная часть интервала представляется как обычно:

Что такое -1? Это 0-1! Попробуем вычесть банальным столбиком:

Мы не можем произвести вычитание, поскольку нам негде «занять» очередную единичку, так как у нас всего 4 разряда... Hо давайте на время про это забудем! Представим, что есть 5-ый разряд и в нем стоит единица. Тогда получается:

Давайте -1 так и представим: 11112. Соответственно, вычитая и так далее по единице, получаем:

Hа практике возникает вопрос: как быстро записать в двоичном виде, например, число -7 (чтобы не вычитать много раз единицы)? Легко заметить, что нужно взять обычное число 7, т.е. 01112, далее инвертировать его и прибавить 1. А можно сначала вычесть 1, а потом инвертировать – результат тот же (1001). Т. е. мы знаем алгоритм умножения числа на -1. Число 10012 (-7) называют дополнительным кодом по отношению к 01112 (7). Т. е. перевод в дополнительный код означает смену знака – только и всего

Определение дополни­тельного кода (дополнение до двух). Дополнительный код положительного числа совпадает с этим числом, а для отрицательного числа он равен дополнению его величины до числа возникающего при пере полнении используемой разрядной сетки. Очевидно, , где – основание системы счисления, – число разрядов. Коды отрицательных чисел которых лежат в пределах от до . Диапазон представления чисел - разрядными дополнительным кодом имеет вид ( ).

На практике важна еще одна особенность дополнительных кодов двоичных чисел. Заметим, что число состоит из единицы в старшем бите и нулей в последующих, поэтому все дополнитель­ные коды отрицательных чисел имеют в старшем бите единицу, а положительных чисел – нуль. Говоря другими словами, старший бит дополнительного кода является признаком знака закодирован­ного числа (знаковым битом).

3.2.2.1.2Особенности арифметики в дополнительном коде

Почему же удобно именно такое представление отрицательных чисел? Дело в том, что компьютеру не обязательно «знать» вычитание, т. е. в него можно не закладывать соответствующий алгоритм, упростив таким образом интегральные схемы. Достаточно сложить дополнительные коды двух чисел. Однако в силу ограниченности интервала представления это может приводить к неверным результатам (например, -8-1=7 или 7+1=-8).

Примеры

Признаком ошибочных ситуаций может служить наличие или отсутствие переносов в знаковый бит и из знакового бита в процес­се сложения: результат ошибочен, если из этих двух переносов произошел только один.

Ещё можно заметить следующее: отрицательные числа как бы занимают места положительных чисел от 8 до 15. Получается, что число 10012 одновременно означает и -7 и 9. Как компьютер с этим разбирается? А ему все равно! Hадо вам, например, к 9 прибавить 2 -- получится 11. Hадо вам к -7 прибавить 2 -- получится -5. Фокус в том, что двоичная запись числа 11 и -5 одинаковая. Т. е. компьютеру совсем не обязательно знать, с какими числами он работает. Это только программисту надо помнить, с каким интервалом чисел он работает: [-8...7] или [0...15] – чтобы верно трактовать результат вычислений, если он находится вне интервала [0...7] (иногда за программиста это помнит компилятор, который, в свою очередь, смотрит на объявленные программистом типы переменных).

Hемного истории. Вычислительная машина Паскаля умела складывать и вычитать, причем вычитала она именно через сложение с использованием дополнительного кода, что на самом деле для пользователя этой машины было не удобно. Поэтому она и не получила широкого распространения. (Умножать и делить она тоже умела, но это выполнялось последовательным сложением и вычитанием). Hормальное вычитание, умножение и деление смог реализовать только Лейбниц. Hо как пригодилась идея Паскаля компьютерщикам!

Кстати, дают 0 всегда. Как в математике.

Для удобства, математическое представление числовой оси можно заменить числовым кольцом. Правая половинка кольца по часовой стрелке – числа от 0 до 7, левая половинка против часовой стрелки – числа от -1 до -8. А левая половинка по часовой стрелке (снизу вверх) – числа от 8 до 15. Левая половинка кольца имеет две трактовки – для неотрицательных чисел, и для отрицательных.