При выполнении арифметических операций в компьютере обычно применяются не простые, а модифицированные коды. Модифицированный код отличается от простого использованием для изображения знака числа двух разрядов. Второй знаковый разряд служит для автоматического обнаружения ситуации переполнения разрядной сетки: при отсутствии переполнения оба знаковых разряда должны иметь одинаковые цифры (нули или единицы), а при переполнении разрядной сетки цифры в них будут разные. При переполнении результат сдвигается вправо на один разряд.
Сложение производится по обычным правилам сложения двоичных чисел: единица переноса, возникающая из старшего знакового разряда, просто отбрасывается.
Примеры сложения:
· Х = –0,1101; Y = 0,1001. Результат сложения: 11,0011 + 00,1001 = 11,1101 (или —1100);
· Х = 0,1101; Y = 0,1001. Результат сложения: 00,0011 + 00,1001 = 01,0110 (переполнение, после сдвига вправо получим 00,10110, или +10110);
· Х = 0,1101; Y = –0,1001. Результат сложения: 00,1100 + 11,0111 = 100,0100 (или 00,0100);
· Х = –0,1101; Y = –0,1001. Результат сложения: 11,0011 + 11,0111 = 10,1010 (переполнение, после сдвига вправо получим 11,01010, или –10110).
Умножение чисел в дополнительных кодах производится по обычным правилам умножения двоичных чисел. Единственной особенностью является то, что если сомножитель является отрицательным (знаковые разряды равны 11), то перед началом умножения следует приписать к нему слева столько единиц, сколько значащих разрядов у другого сомножителя справа от запятой. Результат (произведение) всегда получаем в дополнительном коде.
ПРИМЕЧАНИЕ. Добавление единиц слева перед отрицательным числом не изменяет его величины, так как перед положительным числом можно написать сколь угодно нулей не изменяя величины числа; наоборот, перед отрицательным числом (в дополнительном или обратном кодах) добавление лишних нулей недопустимо.
Примеры операции умножения:
Х = 00,111 Ч 00,101 = 00,100011 Х = 00,111 Ч 11111,011 = 11,011101
00,111 00,111
х 00,101 х 11111,011
________________ __________________
00111 00111
00000 00111
00111 00000
00000 00111
00000 00111
___________ 00111
00100011 00111
___________________________
0011011,010101->11,011101
Х = 11111,001 Ч 00,101 = 11,011101 Х = 11111,001 Ч 11111,011 = 00,100011
11111,001 11111,001
х 00,101 х 11111,011
11111001 11111001
00000000 11111001
11111001 00000000
00000000 11111001
00000000 11111001
001011,011101 -> 11,01101 11111001
1111010000,100011 -> 00,100011
Особенности выполнения операций в обратных кодах Обратные коды следует складывать как обычные двоичные числа, поступая со знаковыми разрядами, как с обычными разрядами, а если возникает единица переноса из знакового разряда, ее следует прибавить к младшему разряду суммы кодов. Последнее обстоятельство (возможное добавление единицы в младший разряд) увеличивает время выполнения операций в обратных кодах, поэтому в компьютере чаще используются дополнительные коды.