Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Arkhiv_v_pomosch / др сем3.docx
Скачиваний:
22
Добавлен:
11.02.2015
Размер:
2.88 Mб
Скачать

Часть 7. Вычитание с переводом в дополнительный код.

Теория:

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

Прямой код. Прямой код числа в двоичной системе счисления совпадает по изoбражению с записью самoгo числа в двоичной системе счисления. Значение

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

Вычитание – это сложение с дополнительным кодом вычитаемого.

a – b => a + dopKod(b)

Чтобы отличать отрицательные числа от положительных первый бит назначается знаковым. Если он равен 0 число положительно, если 1 то соответственно отрицательно.

Алгоритм подготовки вычитаемого к сложению

Преобразовать в дополнительный код и дописать в знаковый бит 1.

Дополнительный код получается в 2 действия.

  1. Поразрядная инверсия числа 10011 -> 01100. Инверсия – это замена 0 на 1, а 1 на 0.

  2. К инвертированному числу надо прибавить 1. 01100 -> 01101

  3. В знаковый бит дописать 1. 01101 -> 101101

Ответ может быть как положителен, так и отрицателен. Определяется знаковым битом.

Если положительно, то все хорошо. Если отрицательно, то надо перегнать из доп кода в прямой код.

Пример.

110011 – 101101

  1. К уменьшаемому (это первое число) дописать знаковый бит.

Оно положительно, дописываем 0

110011 -> 0110011

    1. Из вычитаемого (второе число) получить дополнительный код

101101 -> 010011

    1. Дописать знаковый бит

010011 -> 1010011

  1. Сложить полученные числа

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: