
Часть 7. Вычитание с переводом в дополнительный код.
Теория:
В ЭВМ применяется прямой, обратный и дополнительный коды. Прямой кoд испoльзуется для представления oтрицательных чисел в запоминающем устройстве ЭВМ, а также при умножении и делении. Обратный и дополнительный коды используются для замены oпeрации вычитания опeрацией слoжения, чтo упрощает устройствo арифметического блока ЭВМ.
Прямой код. Прямой код числа в двоичной системе счисления совпадает по изoбражению с записью самoгo числа в двоичной системе счисления. Значение
Несмотря на то, что современные вычислительные средства позволяют постить овсянку в инстаграмм и мочить школие танчиками, в основе своей они примитивны. Только и могут что складывать. Соответственно все арифметические операции заменены сложением. Так и паять проще и вообще.
Вычитание – это сложение с дополнительным кодом вычитаемого.
a – b => a + dopKod(b)
Чтобы отличать отрицательные числа от положительных первый бит назначается знаковым. Если он равен 0 число положительно, если 1 то соответственно отрицательно.
Алгоритм подготовки вычитаемого к сложению
Преобразовать в дополнительный код и дописать в знаковый бит 1.
Дополнительный код получается в 2 действия.
Поразрядная инверсия числа 10011 -> 01100. Инверсия – это замена 0 на 1, а 1 на 0.
К инвертированному числу надо прибавить 1. 01100 -> 01101
В знаковый бит дописать 1. 01101 -> 101101
Ответ может быть как положителен, так и отрицателен. Определяется знаковым битом.
Если положительно, то все хорошо. Если отрицательно, то надо перегнать из доп кода в прямой код.
Пример.
110011 – 101101
К уменьшаемому (это первое число) дописать знаковый бит.
Оно положительно, дописываем 0
110011 -> 0110011
Из вычитаемого (второе число) получить дополнительный код
101101 -> 010011
Дописать знаковый бит
010011 -> 1010011
Сложить полученные числа
0110011
1010011
10000110
в знаковом бите 0, значит ответ положителен
Лишние числа отбрасываются.
Дополнение.
Чтобы было сложнее, чуть-чуть про переполнение.
это в тетрадке клеточек полно, а в реальной жизни разряды 2оичных чисел конечны. Что порождает проблему переполнения. При переполнении результат операции неправилен.
Например у нас всего 4 разряда. С их помощью можно записать числа от 0 до 15 или от -8 до 8. Но никто не мешает сложить 7 и 7, надеясь получить 14. А получится что-то другое:)
Признаком переполнения служат 2последних переноса. Перенос – это числа в уме, те что пишутся мелкими цифрами над столбиком чисел.
Если 2 последних переноса разные 01 10 то все плохо. Переполнение.
Если одинаковые 00 или 11 то все путем.
пример
Дано 4 разряда
-5 – 4
5 в двоичной 101
доп код 101 -> 010
плюс 1 010 -> 011
знаковый бит 011 -> 1011
4 в двоичной 100
доп код 011
плюс 1 100
знаковый бит 100 -> 1100
Складываем 2 числа
в уме - > 10000
1011
+1100
10111
последние два разные, значит переполнение. Ну оно и понятно в знаковом бите 0, типа число положительное и равно 7. -5 – 4 = 7. Ошибка. Переполнение.
Пример 2: