Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 1_РЕД_2.doc
Скачиваний:
291
Добавлен:
27.03.2016
Размер:
10.44 Mб
Скачать

4.4.2 Вычитание

Если числа представлены в разных системах счисления, их предварительно необходимо привести в одну систему счисления. Как и при сложении, записываем одно число под другим таким образом, чтобы разряды с одинаковыми номерами располагались друг под другом. При вычитании большего числа из меньшего результату присваиваем знак «–» и меняем числа местами. Вычитание производим поразрядно, передвигаясь от нулевого разряда к старшим. Если из меньшего числа в разряде вычитается большее, занимаем из следующего старшего разряда одну единицу, равную p единицам текущего разряда.

Пример 4. Вычесть число 8BA3916 из C5D16.

Решение. Так как большее число вычитается из меньшего, присваиваем результату знак «–» и меняем числа местами. Вверху указываем единицы, занимаемые из старших разрядов.

111

8BA39

C5D

8ADDC

Действия в разрядах:

разряд 0 (занимаем единицу в разряде 1): 916 + 1016 – D16 =  = 910 + 1610  1316 = 1210 = C16;

разряд 1 (занимаем единицу в разряде 2): 216 + 1016  516 =  210 + 1610  510 =1310 = D16;

разряд 2 (занимаем единицу в разряде 3): 916 + 1016  C16 =  = 910 + 1610  1210 = 1310 = D16;

разряд 3: A16;

разряд 4: 816.

Ответ:C5D16  8BA3916 = –8ADDC16.

4.4.3. Прямой и дополнительный коды целых чисел. Их представление в памяти компьютера, сложение и вычитание

В электронной памяти числа всех типов (логические, целые (беззнаковые и со знаком), вещественные) всегда занимают целое число байтов. Минимальный объем памяти, занимаемый одним числом, равен одному байту (8 битам).

В формате “беззнаковое целое число” запись положительного целого числа представляет собой его двоичный код, размещенный в байтах, отведенных для него. При этом в одном байте можно разместить двоичные коды всех положительных чисел от 0 (00000000) до 281 = +255 (11111111). Например, 001000102 = +3410, 110011002 = +20410.

В формате “целое число со знаком” знак числа всегда задается в старшем разряде старшего байта: он равен 0 у положительных чисел и 1 у отрицательных. Остальные разряды записи заполняются в зависимости от типа кода. Основными являются прямой код и дополнительный.

Прямой код – это такое представление целого числа со знаком, в котором старший разряд старшего байта отводится под знак числа, а все оставшиеся разряды – под двоичную запись его абсолютной величины (модуля). Например, для однобайтового представления знак помещается в старшем разряде 7, а модуль – в разрядах с 0 по 6: 000010102 = +1010, 100010102 = –1010. При этом диапазон значений охватывает от (–12710) = 111111112 до (+12710) = 011111112.

Для общности прямым кодом беззнакового целого числа можно считать его двоичную запись. Сложение байтовых беззнаковых целых чисел производится по модулю числа 28 = 256. При этом единичные значения, возникающие в разряде 8, выходящем за состав байта, отбрасываются. Например:

100101102 + 011101112 = 1 000011012 = 000011012 (mod 28).

Это свойство используется у беззнаковых целых чисел для замены операции вычитания операцией сложения чисел по следующему правилу:

a – b (mod 28) = a + (–b)(mod 28) = a + (28 – b)(mod 28).

Выражение (28b) называют дополнительным кодом отрицательного числа (–b), соответствующего байтовому беззнаковому числу b. Его можно получить:

1) инвертированием двоичной записи всех разрядов числа b (при котором получается число вида 28 – 1 – b) и последующим

2) прибавлением к нему 1, после чего получаем искомую величину (28 – b).

Дополнительный код положительного числа совпадает с прямым.

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

Решение. Прямой двоичный код беззнакового числа 10 равен 000010102. Прямой код числа 37 равен 001001012. Найдем его дополнительный код:

Инверсия всех разрядов: 110110102. Добавление единицы: 110110112.

Результат сложения: 000010102 + 110110112 = 111001012.

Так как большее число вычиталось из меньшего, ответ отрицательный. Для определения абсолютной величины ответа переведем его в прямой код.

Вычитание: 111001002. Инвертирование: 000110112.

Полученное значение модуля результата равно 2710.

Ответ:а)111001012, б)000110112.

Пример 6. Выполнить вычитание (144  17) байтовых беззнаковых чисел с использованием дополнительного кода. Найти результат в дополнительном и прямом кодах.

Решение. Прямой двоичный код беззнакового числа 144 равен 100100002. Прямой код числа 17 равен 000100012. Найдем его дополнительный код:

Инверсия всех разрядов: 111011102. Добавление единицы: 111011112.

Результат сложения: 100100002 + 111011112 = 011111112.

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

Ответ:а)011111112, б)011111112.

Сложение байтовых целых чисел со знаком производится по модулю числа 27 = 128 (без учета старшего знакового разряда). При этом единичные значения, возникающие в знаковом старшем разряде 7, отбрасываются. Выражение (27 – b) является дополнительным кодом отрицательного числа со знаком, равного (–b). Практически дополнительный код отрицательного числа со знаком (–b) получается следующим образом:

1) занесением в старший знаковый разряд 7 значения 1, означающего отрицательное число;

2) инвертированием двоичной записи всех разрядов числа b помимо знакового старшего (при котором в данных разрядах будет получена запись числа 27 – 1 – b) и 3) прибавлением 1 к полученному в младших разрядах числу, после чего получаем в них искомую величину (27 – b).

При сложении чисел с одинаковым знаком этот же знак присваивается и результату. При сложении чисел с разными знаками в качестве знака результата принимается знак большего по модулю складываемого числа. Например, вычитание целых со знаком чисел (9610 – 2210) можно представить в виде сложения прямого кода первого числа с дополнительным кодом числа (–2210), причем знак результата совпадает со знаком большего по модулю первого числа. Учитывая, что дополнительный код числа (–2210) = 11010102, получим:

9610 – 2210 = 9610 + (–22)10 = 011000002 + 111010102 = 010010102= 7410.

Двоичное 8-ми разрядное число со знаком в дополнительном коде может представлять любое целое в диапазоне от 128 до +127. Если результат вычитания является отрицательным числом, то он получается в дополнительном коде и для оценки модуля результата его переводят в прямой код.

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

Десятичное представление

Код байтового двоичного представления целых чисел со знаком

прямой

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

127

01111111

01111111

1

00000001

00000001

0

00000000

00000000

0

10000000

00000000

1

10000001

11111111

3

10000011

11111101

7

10000111

11111001

8

10001000

11111000

10

10001010

11110110

127

11111111

10000001

128

---

10000000

Пример 7. Представить байтовое отрицательное число со знаком (−21) в а) прямом и б) дополнительном кодах.

Решение. Прямой код отрицательного числа со знаком (−21) равен его двоичной записи с единицей в старшем разряде: 100101012. Строим дополнительный код:

Инверсия его разрядов 0–6: 111010102.

Добавление единицы: 111010112.

Ответ:а)100101012, б)111010112.

Пример 8. Найти в дополнительном и прямом кодах результат вычитания (5 – 21) байтовых целых чисел со знаком с использованием дополнительного кода.

Решение. Из примера 7 берем дополнительный код отрицательного числа со знаком (−21): 111010112. Выполняя его сложение с прямым кодом положительного числа 5, получим дополнительный код итогового числа.

00000101

+11101011

11110000

Полученный дополнительный код переводим в прямой: Вычитание единицы: 111011112. Инверсия его разрядов 0–6: 100100002.

Получен прямой код отрицательного числа (–16).

Ответ:а)111100002, б)100100002.