Контрольная работа: Числовая и нечисловая обработка информации

Во-вторых, в прямом коде числу 0 соответствуют две кодовых комбинации:

Это также неудобно, поскольку усложняется анализ результата на равенство нулю а такая операция в программах встречается очень часто.

Из-за этих недостатков прямой код практически не применяется при реализации в АЛУ арифметических операций над целыми числами. Вместо этого наиболее широкое применение находит другой формат, получивший наименование дополнительного кода.

Дополнительный код

Как и в прямом, в дополнительном коде старший разряд в разрядной сетке отводится для представления знака числа. Остальные разряды интерпретируются не так, как в прямом коде. В таблице перечислены основные свойства дополнительного кода и правила выполнения арифметических операций в дополнительном коде, которые мы рассмотрим в этом и следующем разделах.

Таблица Свойства представления чисел в дополнительном коде

Диапазон представления на n-разрядной сетке от -2 в степени n-1 до 2 в степени n+1
Количество кодовых комбинаций, соответствующих числу 0 Одна
Отрицание Инвертировать значение в каждом разряде представления исходного числа (положительного или отрицательного), а затем сложить образовавшееся число с числом 0001 по правилам сложения чисел без знака
Расширение разрядности представления Добавить дополнительные разряды слева и заполнить их значением, равным значению в знаковом разряде исходного представления
Определение переполнения при сложении Если оба слагаемых имеют одинаковые знаки (оба положительны или оба отрицательны), то переполнение возникает в том и только в том случае, когда знак суммы оказывается отличным от знаков слагаемых
Правило вычитания Для вычитания числа В из числа А инвертировать знак числа В, как описано выше, и сложить преобразованное число с А по правилам сложения в дополнительном коде

В большинстве описаний дополнительного кода основное внимание уделяется технике формирования представления отрицательного числа по представлению соответствующего положительного, причем не приводится формальное - доказательство работоспособности описанной схемы. Рассмотрим n-разрядное двоичное целое число А в дополнительном коде. Если А положительно, то значение его знакового разряда равно О, В значащих разрядах будет представлена абсолютная величина числа точно так же, как и в прямом коде. Число 0 считается положительным и, следовательно, в знаковом разряд его представления будет записан код 0, а во всех значащих разрядах также ко 0.

Теперь перейдем к отрицательным числам. Знаковый разряд an -1 дополнительного кода отрицательного числа А (А<0) равен 1. В n-1 значащих разряда может содержаться произвольная комбинация нулей и единиц. Следовательно, имеется потенциальная возможность представить отрицательные числа. Желательно таким образом установить соответствие между двоичными комбинациями и целыми отрицательными числами, чтобы арифметические операции над ними выполнялись по тем же правилам правилам, что и над числами без знака. В формате целых чисел без знака для вычисления значения числа по его двоичному представлению следует присвоить старшему разряду в разрядной сетке вес. При представлении, включающем и знаковый разряд, это приводит к тому, что желаемые арифметические свойства сохраняются, если вес этого разряда (старшего в разрядной сетке представления) будет равен -2 в степени n-1. Это соглашение и используется при представлении чисел в дополнительном коде. Знаковый разряд дополнительного кода положительного числа равен 0 и, следовательно, его член равен 0. Таким образом, соотношение справедливо для дополнительного кода как положительных, так и отрицательных чисел.

Схематически изобразить свойства представления чисел со знаком в дополнительном коде можно с помощью геометрической интерпретации, представленной в приложении рисунок 1.

Круговые диаграммы на этом рисунке представляют соответствующие отрезки числовой оси, состыкованные в конечных точках. Начав с любого числа, на круговой диаграмме можно добавлять положительное число k , вычитать отрицательное число k ,передвигаясь на k позиций по часовой стрелке или вычитать положительное число k , добавлять отрицательное число k , передвигаясь на k позиций против часовой стрелки. Если при этом пересекается позиция, соответствующая стыковке конечных точек отрезка числовой оси, арифметическая операция даст некорректный результат.

Представление в дополнительном коде в значительно упрощает правила выполнения арифметических операций сложения и вычитания. Поэтому такое представление используется для работы с целыми числами в подавляющем большинстве АЛУ современных процессоров.

Преобразование при изменении длины разрядной сетки

Иногда возникает необходимость записать n-разрядное целое двоичное число в слово длиной т бит, причем т>п. Если исходное число представлено в прямом коде, такое преобразование выполняется довольно просто — нужно перенести знаковый разряд в крайний левый бит нового слова, а остальные дополнительные биты заполнить нулями.

Но с отрицательными числами в дополнительном коде такая схема не дает правильного результата. Преобразование дополнительного кода при расширении разрядной сетки выполняется следующим образом: нужно скопировать значение знакового разряда во все дополнительные биты. Если исходное число было положительным, то все дополнительные биты заполнятся нулями, а если отрицательным — единицами Эта операция называется расширением знака. Формально справедливость этого правила доказывается следующим образом. Рассмотрим n-разрядную последовательность двоичных цифр, которая интерпретируется как представление в дополнительном коде числа А.

Представление с фиксированной точкой

И наконец, следует остановиться еще на одном нюансе. Описанные выше форматы объединяются часто одним термином — формат с фиксированной т кой. Суть его в том, что положение разделительной точки между целой и дробной частями числа неявно фиксируется на разрядной сетке. В настоящее время принято фиксировать точку справа от самого младшего значащего разряда. Программист может использовать аналогичное представление для работы с двричными дробными числами, мысленно фиксируя точку перед старшим значат, разрядом и соответственно масштабируя результаты преобразований, выполняемых стандартными программными или аппаратными средствами.

Арифметические операции с целыми числами

Отрицание

Операция отрицания числа, представленного в прямом коде, выполняется очень просто — нужно инвертировать значение знакового разряда. Если же число представлено в дополнительном коде, отрицание выполняется несколько сложнее, Правило выполнения этой операции формулируется следующим образом. Следует инвертировать значение в каждом разряде представления исходного числа (положительного или отрицательного), включая и знаковый, т.е, установить значение 1 в тех разрядах, где ранее было значение 0, и значение 0 — в тех разрядах, где ранее было значение 1 (эту операцию иногда называют поразрядным дополнением — bitwisecomplement, а ее результат — инверсным кодом).

Нужно сложить образовавшееся число с числом 0, . .001 по правилам сложения чисел без знака. Иногда эту операцию называют вычислением дополнения числа в дополнительном коде ( twos complement operation ).

После операции поразрядного дополнения получим инверсный код интерпретируя его как число без знака, добавим число 1. Полученныйрезультат вновь интерпретируем как число В в дополнительном коде.

Соотношение А = -В эквивалентно соотношению А+В=0.

Сложение и вычитание в дополнительном коде

При выполнении сложения чисел с одинаковыми знаками результат может оказаться таким, что не вмешается в используемую разрядную сетку, т.е. получается число, которое выходит за диапазон представления. Появление такого результата расценивается как переполнение ( overflow ), и на схему АЛУ возлагается функция выявить переполнение и выработать сигнал, который должен воспрепятствовать использованию в дальнейшем полученного ошибочного результата. Для вычитания одного числа (вычитаемого) из другого (уменьшаемого) необходимо предварительно выполнить операцию отрицания над вычитаемым, а затем сложить результат с уменьшаемым по правилам сложения в дополнительном коде.

В приложении, рисунок 2, представлена блок-схема узлов АЛУ, принимающих участие в выполнении операций сложения и вычитания целых чисел. Центральным узлом является двоичный сумматор, на входы которого подаются коды слагаемых, а на выходах формируется двоичный код суммы, причем операция выполняется по правилам сложения чисел без знака. При выполнении сложения оба слагаемых направляются на входы сумматора непосредственно из регистров слагаемых. Результат передается либо в один из регистров слагаемых, либо в третий регистр результата. Кроме кода результата тип сумматор формирует сигнал переполнения, который фиксируется в 1-битовом флаге переполнения. Значение флага интерпретируется следующим образом: 0 — переполнение отсутствует, 1 — есть переполнение. При выполнении операции вычитания код вычитаемого, хранящийся перед началомоперации в регистре, передается на схему, выполняющую операцию отрицания, а уже с выхода этой схемы код поступает на вход сумматора.

Умножение

Алгоритмы выполнения умножения значительно сложнее, чем сложения и вычитания, причем в современных вычислительных системах можно встретить как аппаратную его реализацию, так и программную. Существует много вариантов этих алгоритмов, причем многие из них имеют не только теоретический, но и практический интерес, и выбор одного из многих может быть произведен только с учетом специфики применения конкретной системы.

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

Умножения чисел без знака

К-во Просмотров: 285
Бесплатно скачать Контрольная работа: Числовая и нечисловая обработка информации