"Система Тестирования

 

   
  Главное меню

  Главная

------------------------------------------

  Дистанционное обучение

------------------------------------------

  Олимпиада

------------------------------------------

  Библиотека

------------------------------------------

  Справочники

------------------------------------------

  Тестирование on-line

------------------------------------------

  Зачетная книжка

------------------------------------------

  Вход для

  преподавателей

------------------------------------------

 

    

 

Добро пожаловать в пользовательский раздел сайта!

 

Библиотека : Информатика : Системы счисления: Прямой, обратный и дополнительный код числа.

Ранее были рассмотрены способы хранения чисел в ЭВМ. Напомним, что целые числа хранятся в шестнадцатиразрядной ячейке памяти, причем старший разряд отводится для хранения знака числа, а остальные разряды отводятся под хранение самого числа. Такой способ записи чисел называется прямым кодом двоичного числа. В качестве примера запишем прямой код десятичных чисел 9 и -9. Переведем число 9 в двоичную систему счисления:

                     9 | 2

                     8  4 | 2

                     1  4   2 | 2

                         0   2    1 | 2

                              0    0   0

                                         1

Таким образом, получим прямой код положительного числа 9, в виде которого оно и будет представлено в памяти ЭВМ: 0000000000001001. Для отрицательного числа -9, прямой код примет вид: 1000000000001001. Единица, стоящая в старшем разряде как раз и указывает на то, что число отрицательное. При записи прямого кода, мы идем по очень простому пути:

- получаем прямой код модуля отрицательного числа;

- заменяем ноль, стоящий в старшем разряде на единицу.

 

Таким образом, получаем прямой код отрицательного числа. Но в некоторых случаях такой способ не позволит получить прямой код отрицательного числа, например число -32768, которое, как вы помните, является минимальным числом, принадлежащим множеству целых чисел. Переведем положительное число 32768 в двоичную систему счисления: 32768=10000000000000000в, в этом случае все шестнадцать разрядов заняты, причем в старшем разряде уже стоит единица, хотя число положительное.

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

Дополнительным кодом отрицательного числа m будем называть разность 2k-|m|, где k – количество разрядов в представлении числа.

Для получения дополнительного k-разрядного кода отрицательного числа необходимо выполнить следующий алгоритм:

1)                Представить прямым кодом в k двоичных разрядах модуль отрицательного числа.

2)                Инвертировать значения всех бит полученного прямого кода, т.е. заменить, все нули на единицы, а все единицы на нули в прямом коде модуля числа. Таким образом, получим обратный код исходного числа.

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

В качестве примера получим дополнительный код числа -32768:

1) получаем прямой код модуля числа в 16-ти разрядном представлении:

32768=1000000000000000

2) инвертируем прямой код в обратный:

0111111111111111

3)     К полученному обратному коду прибавляем единицу:

0111111111111111

0000000000000001

1000000000000000

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

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

Если числа имеют одинаковые знаки, то вычисляется сумма этих чисел и сумме присваивается тот же знак.

Если числа имеют разные знаки, то из модуля большего числа вычитается модуль меньшего числа и сумме присваивается знак числа с большим модулем. В этом случае простейшая операция сложения реализуется через достаточно сложный алгоритм, который подразумевает не только сложение чисел.

В качестве подтверждения сказанного найдем сумму чисел -32768 и 32767, понятно, что эта сумма будет равна -1. Дополнительный код числа -32768 мы уже получили, получим прямой код числа 32767, он будет представлен следующим образом: 32767=0111111111111111. Выполним поразрядное сложение полученных дополнительного и прямого кодов заданных чисел:

0111111111111111

1000000000000000

1111111111111111

Полученное в результате поразрядного сложения число является не чем иным как дополнительным кодом числа -1.

Рассмотрим еще один пример вычислительной операции сложения с использованием дополнительного кода.

Пример: Найти сумму чисел 9 и -3.

Ø     Запишем прямой код числа 9 и модуля числа -3 в 16-ти разрядном представлении:

9 = 0000000000001001

|3|=0000000000000011

Ø     Найдем обратный код тройки проинвертировав прямой код числа:

1111111111111100.

Ø     Получим дополнительный код числа -3, путем прибавления к обратному коду единицы:

1111111111111100

0000000000000001

1111111111111101

Ø     Выполним поразрядное сложение прямого кода числа 9 и дополнительного кода числа -3:

1111111111111101

0000000000001001

10000000000000110

 

Ø     Единица, образовавшаяся в старшем разряде, выходит за разрядную сетку, так как это уже семнадцатый разряд, поэтому ее просто отбрасываем и получаем шестнадцатиразрядное число 0000000000000110, что соответствует десятичному числу 6, которое и должно получиться при сложении чисел 9 и -3.

 

 

Предыдущая

Содержание

Следующая

     
 

 

 

 

 

 
 

Центр компьютерного обучения © 2001 - 2020 г.