Популярные услуги

Все письменные КМ под ключ за 3 суток! (КМ-6 + КМ-7 + КМ-8 + КМ-9 + КМ-10)
КМ-6. Динамические массивы. Семинар - выполню любой вариант!
КМ-2. Разработка простейших консольных программ с использованием ООП + КМ-4. Более сложные элементы ООП - под ключ!
Любая задача на C/C++
Одно любое задание в mYsql
Сделаю ваше задание: Лабораторная работа на Pascal / Lazarus
Любой тест по базам данных максимально быстро на хорошую оценку - или верну деньги!
Любой реферат по объектно-ориентированному программированию (ООП)
Повышение уникальности твоей работе
Оба семинара по программированию под ключ! КМ-2. Разработка циклических алгоритмов + КМ-3. Функции и многофайловые программы в Си

Арифметика в дополнительном коде

2021-03-09СтудИзба

2.5 Арифметика в дополнительном коде

МП использует числа в форме дополнительного кода потому, что он в состоянии выполнять операции сложения, инверсии и иккрементирование. МП не приспособлен для прямого вычитания. Он использует сумматоры и для выполнения вычитания оперирует над дополнительным кодом. В общем случае при сложении или вычитании чисел со знаком результат есть также число со знаком. Если при этом бит старшего разряда равен единице, то результат – отрицательное число в дополнительном коде.

Если требуется определить абсолютное значение результата, то его необходимо представить в обратном коде, а затем прибавить единицу.

Используя дополнительный код и сумматор МП выполняет вычитание, которое происходит следующим образом. Определяется дополнительный код вычитаемого и производится сложение этого кода с уменьшаемым. Если разность – число положительное (бит старшего разряда равен 0), то бит переноса необходимо отбросить; полученная последовательность битов и есть двоичный код результата. Если разность – число отрицательное (бит старшего разряда равен 1), то она представлена в дополнительном коде.

Рассмотрим примеры.

1. Вычислить разность чисел 58-23

а) Определение дополнительного кода числа 23

число 2310                                                          00010111

Рекомендуемые материалы

обратный код                                           11101000

+

прибавляем единицу                               00000001

дополнительный код числа 2310             11101001

б) Вычисление разности.

число 5810                                                          00111010                    58

+                         -

11101001          23

Разность 3510                                          100100011                   35

Получили положительный результат, поэтому единица переноса в девятый разряд отбрасывается.

2. Вычислить разность чисел 26-34

а) Определение дополнительного кода числа 34

число 3410                                                          00100010

обратный код числа                                          11011101

+

прибавляем единицу                                         00000001

дополнительный код числа 3410                       11011110

б) Вычисление разности:

26                        00011010

-                           +

34                        11011110

-08                      11111000

Видно, что разность получилась в форме дополнительного кода, поскольку в старшем разряде 1.

в) Определение абсолютного значения разности.

дополнительный код разности               11111000

обратный код                                           00000111

+

прибавляем единицу                               00000001

абсолютное значение разности 810         00001000

3. Сложить десятичные числа -210 и -510

210                                                             00000010

обратный код                                           11111101

+

00000001

дополнительный код -210                         11111110

510                                                             00000101

11111010

+

00000001

дополнительный код 510                          11111011

Числа в дополнительном коде складываются

-2                                                              11111110

+                                                               +

-5                                                              11111011

-7                                                           1  11111001


Старший бит

Старший бит результата является переполнением 8-разрядного регистра и им пренебрегаем. В 8-ом разряде стоит 1. Значит, получено отрицательное  число в дополнительном коде.

Найдём абсолютное значение разности.

11111001

00000110

+

00000001

абсолютное значение разности 710                   00000111

Двоичные умножение и деление

При умножении одного числа на другое одно из чисел называется множимым, другое – множителем. Ниже изображена таблица двоичного умножения. Аналогичную таблицу десятичного умножения, состоящую из 10 строк и 10 столбцов, мы знаем наизусть. По сравнению с ней таблица двоичного умножения чрезвычайно проста: в умножении участвуют цифры, принимающие только два значения – 0 или 1, в результате умножения перенос не возникает никогда.

*

Множимое

0

1

Множитель

0

0

0

1

0

1

Воспользуемся таблицей для вычисления произведения двоичных эквивалентов десятичных чисел 17 и 12.

Множимое 1710                                                                    10001

*

Множитель 1210                                                                   01100

00000

        00000

                                                                                          10001

    10001

  00000

Результат 20410                                                               11001100

Первые два частных произведения включают только нули, так как множители – значения первого и второго разрядов – равны нулю. Третье частное произведение – копия множимого. Разница между ними заключается лишь в том, что копия сдвинута относительно множимого на два двоичных разряда влево, поскольку для получения этого частного произведения в качестве множителя используется значение третьего разряда. Четвёртое частное произведение также является копией множимого смещённой относительно последнего на три двоичных разряда влево. Все остальные произведения – нули. Сложение всех частных произведений в данном примере не сопровождается переносом, однако возникновение последнего не исключено.

Обычно умножение и деление как отдельные операции в МП  не предусматриваются. Эти операции выполняются с использованием специальной подпрограммы. Программно умножение реализуется путём сдвига и сложения. Перечислим правила этого способа.

1. Формирование первого частного произведения. Если значения младшего значащего разряда множителя равно 0, то и результат равен 0. Если значение этого разряда равно 1, то результат является копией множимого.

2.  Правило сдвига. При использовании очередного разряда множителя для формирования частичного произведения производится сдвиг множимого на один разряд влево.

3. Правило сложения. Каждый раз, когда значение  разряда множителя равно 1, к результату необходимо прибавлять множимое, расположенное в позиции, определённой правилом сдвига.

4.  Искомое произведение есть результат выполнения всех операций сдвига и сложения.

Продемонстрируем правила сдвига и сложения на рассмотренном примере умножения 1710 и 1210:

10001

*

01100

      10001              множимое, сдвинутое влево на 2 разряда

    10001                множимое, сдвинутое влево на 3 разряда

    11001100ять множимое расположено         сумма сдвинутых множимых

Ещё пример: 93*45=4185

                                     93                                 01011101

                                     *                                    *

                                     45                                 00101101

                                                                           01011101

                                                                       01011101

                                                                     01011101

                                                                01011101

                                     418510=             1000001011001

Прокомментируем первый пример. При использовании первого разряда множителя множимое не смещается, а поскольку значение этого разряда равно нулю, то первое частичное произведение равно 0. Следовательно, равно нулю и текущее значение результата. При использовании второго разряда со значением равным 0, множимое сдвигается на один разряд влево, но сложение, как и в предыдущем случае, не выполняется. Значение третьего разряда множителя равно 1, поэтому множимое сдвигается ещё на один разряд влево, а затем добавляется в качестве слагаемого к текущему значению результата. При использовании четвёртого разряда, значение которого равно 1, осуществляется сдвиг множимого на один разряд влево по сравнению с его позицией после операции с третьим разрядом. Затем множимое добавляется к текущему значению результата.  Поскольку остальные разряды множителя содержат нули, никаких добавлений к текущему значению результата больше не происходит.

       Деление – это операция, обратная умножению. Иначе говоря, при делении операцию вычитания повторяют до тех пор, пока уменьшаемое не станет меньше вычитаемого. Число этих повторений показывает, сколько раз вычитаемое укладывается в уменьшаемом. Двоичное деление осуществляется аналогично десятичному.

     Рассмотрим пример.

Разделить число 20410 на 1210

11001100                1100                            11001100=20410

1100                        10001                          1100=1210

      01100                                                   10001=1710

      01100

              0

       Двоичное деление начинается с анализа делимого и делителя. Сразу обнаруживаем, сто делитель точно укладывается в первые четыре цифры делимого, а потому записываем цифру 1 в поле, предоставленное для формирования частного. Умножаем делитель на 1 и вычитаем результат из 1100. Разность равна нулю, т.е. меньше делителя, а поэтому процесс деления можно продолжить. Объединяем нуль остатка со значением следующего разряда делимого, равным 1. Поскольку делитель укладывается ноль раз в числе 1, записываем 0 в поле представления частного, а число 1 объединяем со следующей цифрой делимого и т.д. Описываемая процедура продолжается до тех пор, пока делимое не оказывается исчерпанным.

Арифметика повышенной точности

       Обсудим, как в МП реализуется арифметика повышенной точности. При работе с МП часто выясняется, что длина слов, которыми он оперирует, недостаточна для достижения требуемой точности вычислений. Например, 8-разрядный МП использует числа в диапазоне от -128 до +127. Для большинства задач такой диапазон неприемлем. Используя два 8-битовых слова с представлением  отрицательных  чисел  в дополнительном  коде,  получим  диапазон от

-32768 до 32767. Для решения многих задач указанной двойной точности этого вполне достаточно. Однако иногда требуется тройная точность вычислений: 1 бит для знака и 23 бит для абсолютной величины числа. Диапазон чисел в случае тройной точности следующий: -8388608 до 8388607, включая 0. Однако при работе с арифметикой повышенной точности требуется большой объем памяти для хранения данных и более интенсивная работа МП. Пусть например, необходимо использовать арифметику тройной точности в 8-разрядной вычислительной системе. Для этого необходимо сначала  произвести обращение к младшему значащему байту каждого числа. После сложения двух байтов результат записывают в память, а возможные при этом переносы подлежат временному хранению. Затем из памяти извлекают следующие по значимости байты и складывают, прибавляя биты переноса, полученные в результате предыдущей операции сложения. Результат записывают в память на место специально зарезервированное для среднего байта суммы. Наконец из памяти извлекают старшие значащие байты, складывают их, к сумме добавляют биты переноса, полученные при предыдущей операции сложения, и результат записывают в область памяти, зарезервированную для старшего значащего байта суммы. Таким образом, требуется в три раза больше времени и объема памяти.

Арифметика чисел с плавающей точкой

       Не все проблемы могут быть разрешены при использовании арифметики с повышенной точностью. До сих пор рассмотрение было ограничено целыми числами. Действия с дробными числами осуществляются в арифметике чисел с плавающей точкой (запятой), позволяющей МП отслеживать положение десятичной точки. Это достигается благодаря использованию представления десятичных дробей в нормализованном виде, т.е. в виде мантиссы, диапазон значений которой от 0,1 до 1, и порядка - показателя степени числа 10. Например, число 50 представляется как 0,5*102, а число -750 как -0,75*103.

       Числа с плавающей        точкой хранятся в МП так же как и целые числа. Записывается мантисса со знаком и порядок со знаком. Представление числа в форме с плавающей точкой в 8-разрядном МП можно изобразить следующим образом.

Адрес байта

Содержимое байта

М+3 (4-й байт)

+ или – 7-битовый порядок

М+2 ( 3-й байт)

+ или – 7 старших битов мантиссы

М+1 (2-й байт)

8 средних битов мантиссы

Если Вам понравилась эта лекция, то понравится и эта - 11 - Характерные особенности рельефа.

М (1-й байт)

8 младших битов мантиссы

      

       Число в форме с плавающей точкой занимает 4 байт. Мантисса представлена как число тройной точности и занимает три байта. Старший бит третьего байта знаковый. Четвёртый байт занят порядком: 7 бит величины и 1 бит знака. Арифметика  чисел  с плавающей  точкой  позволяет  оперировать  числами  от

-223×2127 до (223-1)×2127. Следовательно, диапазон чисел очень большой.

                   

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее