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

В электронной памяти числа всех типов (логические, целые (беззнаковые и со знаком), вещественные) всегда занимают целое число байтов. Минимальный объем памяти, занимаемый одним числом, равен одному байту (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 =1000011012 =000011012 (mod 28).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Решение. Прямой двоичный код беззнакового числа 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, получим:

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

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


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

Десятичное представление Код байтового двоичного представления целых чисел со знаком
прямой дополнительный
−0
−1
−3
−7
−8
−10
−127
−128 ---

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

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

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

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

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

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

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

+11101011

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

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

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








Дата добавления: 2015-10-05; просмотров: 3867;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.