русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Кодирование и обработка знаковых чи­сел


Дата добавления: 2014-02-04; просмотров: 692; Нарушение авторских прав


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

Прямой код.

Это естественное и наиболее привычное представление числа в следующем виде:

знак:

"+" соответствует 0

"-" соответствует 1

В цифровых разрядах пишется модуль положительного или отрицательного числа.

[X]пк - обозначим таким образом изображение числа "X" в прямом коде.

Рассмотрим диапазоны представляемых чисел:

X+min = 0,000....0 - изображение положительного нуля

X+max = 0,111....1 = 1 - 2-n

X-min = 1,111....1 = -(1-2-n)

X-max = 1,000....0 - изображение отрицательного нуля.

Таким образом, нуль имеет двоякое изображение.

Замечания:

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

при выполнении операции умножения отдельно и независимо находятся модули произведений кодов, а знак находится как результат операции сложения по модулю два:

[X]пк * [Y]пк = sign Z. |Z|

|Z| = |X|*|Y|

sign Z = sign X sign Y или Sz = Sx Sy

Собственно умножение выполняется с применением микроопераций сложения и сдвига.

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

Вследствие ряда неудобств в ЭВМ операции вычитания, сложения чисел с разными знаками и деления в прямом коде практически не выполняются.

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

Дополнительным называется код, в котором для положительного числа в знаковом разряде пишется "0", в цифровых - модуль числа, а для отрицательного в знаковом разряде пишется "1", в цифровых - дополнение числа до единицы.



Если некоторое X- = -0,x1x2...xn нужно представить в дополнительном коде, то

где: 1 - 0,x1x2...xn = 0, Z1Z2...Zn

Диапазоны представленных чисел:

Х+ min = 0,0...0 - положительный нуль

Х+ max = 0,11...1 = 1-2-n - максимальное положительное число.

X- min = 1,11...1 = 2-2-n - минимальное отрицательное число

X- max = 1,0...0 - наибольшее(по модулю) отрицательное число

Таким образом, нуль имеет единственное представление.

В самом деле, так как

X-X = [X+]дк + [X-]дк = 0, то в дополнительном коде: |X+| + 10 - |X-| = 10, если в разрядной сетке ЭВМ нет второго знакового разряда, то это переполнение теряется, и в знаковом разряде будет только нуль.

Важная особенность в получении дополнительного кода отрицательного числа состоит в следующем:

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

Рассмотрим на примерах выполнение операции сложения двух чисел с разными знаками.

Возможны следующие случаи:

X+ + Y+ = S+

X+ + Y- = S+

X+ + Y- = S-

X- + Y- = S-

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

Положим n = 3, 1 - знаковый разряд и 2 - цифровых.

X+ = 0,10

Y+ = 0,01

В дополнительном коде

То есть, нет никаких особенностей.

X+ = 0,10

Y- = -0,01

В дополнительном коде

Переполнение теряется и получается верный результат.

X+ = 0,01

Y- = -0,11

В дополнительном коде

X- = -0,10

Y- = -0,01

В дополнительном коде

Возникающее переполнение теряется и общий результат отрицательный.

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

Обратным называется код, для которого в знаковом разряде положительного числа пишется "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

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

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

X+ = 0,10

Y- = -0,01

X+ + Y- = S+

В обратном коде:

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

X+ = 0,10

Y+ = +0,01

X+ + Y+ = S+

В обратном коде:

Нет никаких особенностей по сравнению с прямым кодом.

X+ = 0,01

Y- = -0,10

X+ + Y- = S-

В обратном коде:

То есть, не возникает циклического переноса.

X- = -0,01

Y- = -0,10

X- + Y- = S-

В обратном коде:

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

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

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



<== предыдущая лекция | следующая лекция ==>
Плавающая запятая | Модифицированные коды


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.258 сек.