|
Добро пожаловать в
пользовательский раздел сайта! |
|
Библиотека
: Информатика : Системы счисления:
Прямой, обратный и дополнительный код числа. |
Ранее
были рассмотрены способы хранения чисел в ЭВМ. Напомним,
что целые числа хранятся в шестнадцатиразрядной ячейке
памяти, причем старший разряд отводится для хранения
знака числа, а остальные разряды отводятся под хранение
самого числа. Такой способ записи чисел называется
прямым кодом двоичного числа. В качестве примера запишем
прямой код десятичных чисел 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.
|
Предыдущая |
Содержание |
Следующая |
|
|
|
|
|
|