Консультация № 180397
22.10.2010, 04:36
47.45 руб.
0 5 1
День добрый, уважаемые эксперты. Помогите, пожалуйста, с таким заданием:

Сложить два двоичных числа, если порядки представлены в обратном коде, мантиссы - в дополнительном коде:

0.11 0.11001
0.00 0.10010

С решением и, желательно, небольшими комментариями для ясности.

Спасибо большое!

Обсуждение

давно
Мастер-Эксперт
325460
1469
22.10.2010, 11:01
общий
Обратный n-разрядный двоичный код положительного целого числа состоит из одноразрядного кода знака (двоичной цифры 0), за которым следует n − 1-разрядное двоичное представление модуля числа (обратный код положительного числа совпадает с прямым кодом).

Пример. Двоичное представление числа 5 есть 101. Прямой 10-разрядный двоичный код числа +5 есть 0000000101.

Обратный n-разрядный двоичный код отрицательного целого числа состоит из одноразрядного кода знака (двоичной цифры 1), за которым следует n − 1-разрядное двоичное число, представляющее собой инвертированное n − 1-разрядное представление модуля числа.

Пример. Двоичное представление числа 5 есть 101, его 9-разрядное двоичное представление — 000000101. Обратный 10-разрядный двоичный код числа −5 есть 1111111010.
дополнительный код
Преобразование числа из прямого кода в дополнительный осуществляется по следующему алгоритму.
Если число, записанное в прямом коде, положительное, то к нему дописывается старший (знаковый) разряд, равный 0, и на этом преобразование заканчивается;
Если число, записанное в прямом коде, отрицательное, то все разряды числа инвертируются, а к результату прибавляется 1. К получившемуся числу дописывается старший (знаковый) разряд, равный 1.

мантисса - дробная часть
порядок - целая

у вас числа 0.11 0.11001 - это одно число с порядком и мантиссой? или 0.11 одно число 0.11001 другое, поясните пожалуйста.
Об авторе:
to live is to die
Неизвестный
22.10.2010, 11:06
общий
Первые три цифры - порядок, остальные - мантисса. То есть:
1-ое число: порядок(0.11) и мантисса(0.11001)
2-ое число: порядок(0.00) и мантисса(0.10010)
Неизвестный
22.10.2010, 11:24
общий
это ответ
.Здравствуйте, MrSpencer!

Итак,
A=0.11 0.11001: порядок = +3; мантисса = +(1,11001) = +1,78125 (т.к. мантисса является нормализованной, т.е. находится в диапазоне [1, 2), при этом сама единица не хранится).
B=0.00 0.10010: порядок = +0; мантисса = +(1,10010) = +1,5625

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

Порядок числа A равен +3, числа B - 0.
У результата порядок будет равен 3, а мантисса B должна быть сдвинута вправо на 3 разряда:
B'=(1.10010)>>3 = (0.00110010)

2. Производится сложение мантисс по правилу сложения чисел с плавающей точкой.
C=A+B':
1.11001000
0.00110010
----------------
1.11111010

3. В случае необходимости производится нормализация результатов.
Такой необходимости не требуется, т.к. мантисса осталась нормализованной.

Оставляем 5 разрядов мантиссы и получаем:
C = A+B = 0.11 0.11111

4. Проверяем:
A = 1,78125*23 = 14,25
B = 1,5625
C' = A+B = 15,8125
C = 1,96875*23 = 15,75

C'-C = 0,0625 = 0.00001 - соответствует точности представленного формата.
Неизвестный
22.10.2010, 11:39
общий
Абаянцев Юрий Леонидович aka Ayl:
А можете пояснить, как получилось, что мантисса числа A, например, = +(1,11001) = +1,78125? А если конкретнее - два вопроса: почему в целой части единица, и как получилось, что 11001 соответствует 78125?
А остальное понятно, спасибо большое!
Неизвестный
22.10.2010, 14:33
общий
MrSpencer:
Действуем в предположении, что мантисса является нормализованной.
Нормализованная мантисса имеет вид: 1,b1b2...bn, причем старшая единица не хранится.
Это стандарт представления чисел с плавающей запятой IEEE 754.
Поэтому я ее и добавлял.
По поводу соответствия двоичных и десятичных чисел.
Двоичное число BnBn-1...B0,b1b2...bk переводится в десятичное следующим образом:
D=Bn*2n+Bn-1*2n-1+...+B0*20+b1*2-1+b2*2-2+...+bk*2-k.
Отсюда 0,11001 = 1/2+1/4+1/32 = 25/32 = 0,78125.
Форма ответа