logo search
Полный текст учебника

Выполнение арифметических операций над числами, представленными в дополнительных кодах

При выполнении арифметических операций в ЭВМ применяются модифицированные коды, которые отличаются от простого использованием для изображения знака числа двух разрядов. Второй знаковый разряд служит для автоматического обнаружения ситуации переполнения разрядной сетки: при отсутствии переполнения оба знаковых разряда должны иметь одинаковые цифры (нули или единицы), а при переполнении разрядной сетки цифры в них будут разные. Сложение производится по обычным правилам сложения двоичных чисел: единица переноса, возникающая из старшего знакового разряда, просто отбрасывается. Примеры сложения (запятая условно отделяет знаковый разряд от самого числа):

Х = –1101; Y = 1001. Результат сложения: 11,0011 + 00,1001 = 11,1100 (или –0100);

Х = 1101; Y = 1001. Результат сложения: 00,1101 + 00,1001 = 01,0110 (переполнение, после сдвига вправо получим 00,10110, или +10110);

Х = 1101; Y = –1001. Результат сложения: 00,1101 + 11,0111 = 100,0100 (или 00,0100);

Х = –1101; Y = –1001. Результат сложения: 11,0011 + 11,0111 = 10,1010 (переполнение, после сдвига вправо получим 11,01010, или –10110).

Умножение чисел в дополнительных кодах осуществляется по обычным правилам умножения двоичных чисел. Единственной особенностью является то, что если сомножитель является отрицательным (знаковые разряды равны 11), то перед началом умножения следует приписать к нему слева столько единиц, сколько значащих разрядов у другого сомножителя справа от запятой. Результат (произведение) всегда в дополнительном коде.

ПРИМЕЧАНИЕ

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

Примеры операции умножения:

Х = 00,111 · 00,101 = 00,100011

00,111

× 00,101

________________

00111

00000

00111

00000

00000

__________

00100011

Х = 00,111 · 11111,011 = 11,011101

00,111

× 11111,011

_________________

00111

00111

00000

00111

00111

00111

00111

00111

___________________________

0011011,010101 ® 11,011101

Х = 11111,001 · 00,101 = 11,011101

11111,001

× 00,101

11111001

00000000

11111001

00000000

00000000

001011,011101 ® 11,01101

Х = 11111,001 · 11111,011 = 00,100011

11111,001

× 11111,011

11111001

11111001

00000000

11111001

11111001

11111001

11111001

11111001

1111010000,100011 ® 00,100011