Обратный код
Обратным называется код, для которого в знаковом разряде положительного числа пишется "0", в цифровых - модуль числа, а для отрицательного - в знаковом разряде пишется единица, в цифровых - инвертированные разряды исходного числа.
Определим диапазоны чисел:
X+ min = 0,00...0 - положительный нуль.
X+ max = 0,111...1 = 1 - 2-n
X- min = 1,11...1 0 = 2 - 2-n+1
X- max = 1,00...00 = 1
В обратном коде есть два изображения нуля:
"Положительный" нуль:
[X]ок = 0,0...0и "отрицательный" нуль:
[X]ок = 1,11...11При этом
X - X = [X+]ок + [X-]ок = |X+| + 10 - (10)-n - |X-| = +10 - (10)-n = 0То есть, единица переноса в знаковом разряде эквивалентна единице младшего разряда. Поэтому при выполнении операции сложения-вычитания необходимо возникающий перенос циклически прибавлять в младший разряд частичного результата.
Рассмотрим прежние четыре случая, помня о том, что сумма двух слагаемых по модулю должна быть меньше единицы.
1. X+ = 0,102. Y- = -0,01 3. X+ + Y- = S+4. В обратном коде:
Возникающее переполнение должно быть добавлено к младшему разряду частичной суммы.
5. X+ = 0,106. Y+ = +0,017. X+ + Y+ = S+8. В обратном коде:
Нет никаких особенностей по сравнению с прямым кодом.
9. X+ = 0,0110. Y- = -0,1011. X+ + Y- = S-12. В обратном коде:
То есть, не возникает циклического переноса.
13. X- = -0,01 14. Y- = -0,10 15. X- + Y- = S-16. В обратном коде:
Возникает переполнение знакового разряда, которое добавляется в младший разряд частичной суммы.
Заметим, что получение обратного кода проще, чем дополнительного. Это поразрядно выполняемая микрооперция инверсии кода. Как станет ясно из схемного решения, эта микрооперация выполняется так же быстро, как и передача кода.
Поскольку результатом операции является совокупность результатов по всем разрядам, то данную операцию можно выполнять одновременно над всеми цифровыми разрядами числа.
8. Лекция: Модифицированные коды | |
![]() | |
![]() | |
![]() | |
Страницы: 1 | 2 | 3 | вопросы | » | | учебники | для печати и PDA | ZIP |
![]() | |
Если Вы заметили ошибку - сообщите нам, или выделите ее и нажмите Ctrl+Enter | |
![]() | |
В лекции описаны модифицированный дополнительный и обратный коды. Даны методы умножения чисел с фиксированной запятой в прямом и дополнительном кодах, а также алгоритмы сдвига. | |
![]() | |
![]() | |
![]() | |
Важная особенность рассмотренных кодов состоит в том, что в процессе выполнения операции сложения-вычитания не происходит переполнения цифровой части числа и переноса в знаковый разряд. Переполнение возникает лишь в знаковом разряде. Так бывает потому, что сумма двух слагаемых по модулю меньше единицы.
При решении реальных задач часто трудно определить заранее, будет ли сумма двух слагаемых меньше единицы. Во всяком случае, для предотвращения переполнения можно вводить дополнительные ограничения на величину слагаемых, сужающих диапазон чисел, с которыми оперирует машина. И то, и другое является неприемлемым.
Рассмотрим такой пример:
X = -0,101 Дополнительный код 1.011 = [X]дк
Y= -0,111 1.001 = [Y]дк
S- = X- + Y- 0.100 = [S]дк
То есть получаем неправильный результат как по знаку, так и в цифровой части.
Рассмотрим ещё один пример:
X = +0,101 В любом из ранее рассмотренных 0.101 = [X]дк,ок
Y = +0,111 кодов имеем 0.111 = [Y]дк,ок
S+ = X+ + Y+ 1.100 = [S]дк,ок
То есть и в этом случае происходящее переполнение в цифровой части искажает результат операции.
Можно заметить, что переполнение числовой сетки происходит в случае одинаковых знаков слагаемых, так как именно в этом случае модуль результата превосходит модули каждого из слагаемых, сам факт переполнения может быть зафиксирован изменением знака результата.
Таким образом, одним из способов фиксации переполнения является автоматическое определение перехода от одинаковых знаков слагаемых к противоположному знаку результата.
Однако такой способ фиксации переполнения неудобен, так как предварительно знаки слагаемых должны быть запомнены, сравнены между собой и после получения результата.
Существует другой принцип фиксации переполнения. Этот принцип основан на применении так называемых модифицированных кодов. Очевидно,что при переполнении разрядной сетки вычисления необходимо прекратить или, покрайней мере, выработать специальный признак переполнения, а решение о прекращении вычислений возложить на программиста.
Существо модифицированных кодов состоит в том, что к знаковому разряду добавляется ещё один разряд:
"+" ставится в соответствие 00
"–" ставится в соответствие 11
Тогда, по определению модифицированным дополнительным кодом числа называется
![]() ![]()
![]() |