Мои Конспекты
Главная | Обратная связь


Автомобили
Астрономия
Биология
География
Дом и сад
Другие языки
Другое
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Металлургия
Механика
Образование
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Туризм
Физика
Философия
Финансы
Химия
Черчение
Экология
Экономика
Электроника

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



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