Основные операции над двоичными числами

Главная » Каталог статей » Статьи на русском » Кодирование информации » Основные операции над двоичными числами

  Алгебраическое сложение чисел, представленных в форме с плавающей запятой

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

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

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

Таким образом, операция нормализации числа состоит из проверки выполнения условия

0,12 m 1

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

Нарушение нормализации может быть двух видов: нарушение справа, т.е. когда величина результата больше или равна 1, и слева, когда величина результата оказывается меньше 0,12.

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

0 r rmax ,

где rmax = l + pmax .

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

Имеем 8-разрядную мантиссу и 6-разрядный порядок, смещение равно 10002. Сложим 2 числа с мантиссами m1 = 0,10100000, m2 = 0,10000000 и с характеристиками r1 = 001011, r2 = 001010. Т.к. порядки разные надо их выравнивать: r1 — r2 = 000001, значит надо сдвинуть m2 на 1 разряд вправо, а к r2 прибавить 1. После преобразований получим:

m2 = 0,01000000, r2 = 001010 + 000001 = 001011. Складываем мантиссы, получаем: m = m1 + m2 = 0,10100000 + 0,01000000 = 0,11100000, r = 001011.

Нормализация ответа не нужна.

Умножение двоичных чисел

Методы умножения двоичных чисел

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

1) умножение начиная с младших разрядов множителя:

1101 множимое

x 1101 множитель

1101

+ 0000

1101 частные произведения

1101

10101001 произведение

2) умножение начиная со старших разрядов множителя:

1101 множимое

x 1101 множитель

1101

+ 1101

0000

1101

10101001 произведение

В обоих случаях операция умножения состоит из ряда последовательных операций сложения частных произведений. Операциями сложения управляют разряды множителя: если в каком-то разряде множителя находится единица, то к сумме частных произведений добавляется множимое с соответствующим сдвигом (влево или вправо), если в разряде множителя — ноль, то множимое не прибавляется, но учитывается, что в последующей операции анализа разряда множителя надо сделать дополнительный сдвиг. Если, например, в следующем после нулевого разряда множителя встречается 1, то множимое сдвигается на 2 разряда и добавляется к сумме частных произведений. Сколько подряд будет встречаться 0 столько дополнительных сдвигов множимого надо будет сделать когда в очередном разряде встретится 1, а затем добавлять множимое к сумме частных произведений.

Таким образом, кроме операции сложения чисел для получения произведения необходима операция сдвига числа.

Умножение чисел, представленных в форме с фиксированной запятой

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

Умножение чисел представленных в форме с фиксированной запятой можно организовать не только на двоичном сумматоре прямого кода, но и на двоичных сумматорах обратного или дополнительного кода. В этом случае произведение дополнительных или обратных кодов сомножителей равно дополнительному или обратному коду соответственно только в случае положительного множителя. Если же множитель отрицательный, то производится коррекция результата: в первом случае прибавляется поправка [A]= а во втором случае прибавляются поправки [A] и [A]об2-n .

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

1) умножим 5 на 2. 510 = 0. 01012, 210 = 0. 00102 Знак результата положительный.

0.0101

x 0.0010

0000

+ 0101

0.01010 = 1010

2) умножим 5 на 3

0.0101

x 0.0011

0101

+ 0101

0.1111 = 1510

Умножение чисел, представленных в форме с плавающей запятой

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

A1 x A2 = m12clip_image002 x m22clip_image004 = (m1 x m2)2clip_image006 ,

где r1 + r2 — l — характеристика результата.

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

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

0 r rmax ,

где rmax = l + pmax .

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

умножим числа с мантиссами m1 = 0,101 (5), m2 = 0,1 (2) и характеристиками

r1 = 1011, r2 = 1010, l = 1000, p1 = 3, p2 = 2, p = p1 + p2 = 5, r = r1 + r2 — l = 001011 + 001010 — 001000 = 001101 = 1310 m = m1 x m2 = 0,01010, необходимо нормализовать ответ. Для этого в данном случае сдвигаем мантиссу влево на 1 разряд и вычитаем 1 из p, получаем p = 4. В итоге имеем m = 0,10102, p = 410 = 01002, r = 1210 = 11002.

Оставьте комментарий к статье