Виды данных. Операции с числами и структура системы команд, страница 2

Если диапазон представимых чисел в данной разрядной сетке мал, можно использовать представление чисел с повышенной разрядностью – перейти от char к int или к double. И далее использовать для представления операнда два или три или более слов.

В некоторых процессорах может использоваться так называемая «арифметика с насыщением» при выходе результата за границу представимого диапазона процессор подставляет в качестве результата ближайщее к нему представимое число.

Целые со знаком: дополнительный код

Диапазон представимых значений в N-битовой сетке

HEX

BIN

DEC

К предыд. зн.

10...00*)

100...000

-2N-1

-1

Наименьшее отрицательное число

.....

.....

.....

1..FFE

-2

-1

1..FFF

111...111

-1

-1

00...00

000...000

0

-1

  Нуль

00...01

000...001

1

-1

00...02

000...010

2

-1

.....

.....

0..FFF

011...111

2N-1-1

-1

Наибольшее положительное число

Естественный способ представления отрицательных чисел можно получить, последовательно вычитая 1 из нуля. Полученное представление отрицательных чисел называется дополнительным кодом (английский эквивалент: two’s complement). Представление чисел со знаком в дополнительном коде также будет циклическим.

Обратите внимание на то, что в выбранной разрядной сетке используются для представления чисел все кодовые комбинации, т.е. любой последовательности единиц и нулей в коде соответствует какое-то числовое значение. (При представлении чисел в форматах плавающей точки это будет не так !)

Граница на числовом круге выбирается так, чтобы диапазон был симметричен относительно нуля. Однако полной симметрии не получается. Наименьшее отрицательное число не имеет положительного эквивалента. Кроме того, при такой границе, старший бит кода играет роль знакового: 0 соответствует положительным числам, а 1 - отрицательным.

Как поменять знак числа: -k = -1 -k +1 = (-1 -k) +1

Действие (-1 -k) всегда возможно, и никогда не требует заема. Его можно реализовать инвертированием кода. Это легко увидеть, выполнив вычитание «столбиком»: результат есть инверсия вычитаемого:

-

 
            1 1 1 1 . . . 1 1
          _1 0 0 1 . . . 0 1_           - вычитаемое
            0 1 1 0 . . . 1 0             - результат – инверсия вычитаемого

Смена знака наименьшего отрицательного числа 100..00 даст неверный результат. Это означает, что представление в дополнительном коде несимметрично. По этой причине это значение часто используется для специальных целей (например в FPP для изображения значения «неопределенность»)

Использовались и другие способы представления отрицательных чисел, например отдельно знаковым разрядом и абсолютной величиной (есть много других способов). Дополнительный код хорош тем, что в нем действия сложения и вычитания над беззнаковыми числами и над числами со знаком выглядят одинаково. Это эквивалентно утверждению, что «дополнительный код суммы чисел равен сумме дополнительных кодов слагаемых».

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

Действия над целыми числами и машинные команды

Какие операции надо призводить с целыми числами?

Интуитивно это в первом приближении понятно:

Арифметические действия:  +  -  *  /
Сравнение  целых чисел:  >  <  =

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

Деление

 последовательность вычитаний и сравнений

Умножение

 последовательность сложений и сдвигов

Вычитание

 сложение с отрицательным операндом

Смена знака

 инвертирование и прибавление 1

Сложение

Сдвиг

 (что делать с битами, выходящими за пределы разрядной сетки ?)

Увеличение
(/уменьшение) на 1

 по честному со всеми переносами и, возможно, с переполнением

В этой таблице некоторые вышестоящие операции могут быть выполнены как комбинации некоторых нижестоящих.

Переполнение при действиях над числами со знаком.

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

При сложении беззнаковых чисел - переполнение происходит, если при действии пересекается граница разрыва 11...11 çè 00...00.