Другие языки программирования и технологии

Выполнить арифметические операции в двоичной системе счисления по алгоритмам, применяемым в ЭВМ

сложить числа А и В (в формате с фиксированной запятой в дополнительном модифицированном коде) A=-5 B=-8.25
Murat Otargaliev
Murat Otargaliev
547
"Выполнить . .сложить " - многовато команд на одно несложное задание!
Переведи заданные числа в 2 с. с. , затем знак минус замени на 1, числовые разряды двоичного числа запиши без изменения так получишь прямой код числа;
затем в числовых разрядах прямого кода все 0 замени на 1, а все 1 замени на 0 и получишь обратный код;
к младшему разряду обратного кода прибавь 1, так получишь дополнительный код числа.
После этого выполняй арифметические операции над обр. и доп. кодами чисел.
АО
Алексей Осипов
29 246
Лучший ответ
Сначала числа преобразуются в двоичный код.
А=-5(10)=-101(2)
В=-8,25(10)=-1000,01(2)
Числа в формате с фиксированной запятой в памяти хранятся таким образом, что позиция запятой известна и неизменна для всех чисел (отсюда и название с фиксированной точкой) .
Для этого число А должно быть представлено в виде -101,00(2)
Пусть для хранения используется 8 разрядов. Тогда числа в прямом коде будут представлены в виде
А: 1.00101,00
В: 1.01000,01 - здесь отделённый точкой старший разряд знаковый, 1 - означает минус.
Обратный код получается инверсией всех разрядов, кроме знаковых.
А: 1.11010,11
В: 1.10111,10
Теперь нужно получить дополнительный код. Но перед этим нужно иметь в виду, что ни запятые, ни точки в памяти не хранятся, но всегда известно, где знаковый разряд и сколько разрядов в дробной части. Поэтому
А: 11101011 + 1 = 11101100
В: 11011110 + 1 = 11011111
Это и есть внутреннее представление заданных чисел в дополнительном коде.
Сложение и вычитание чисел с фиксированной точкой производится так же, как и для целых чисел.
11101100
+
11011111
---------------
111001011 - старший разряд (№8) будет выдавлен из разрядной сетки и в данном случае просто отброшен. Результат операции сложения 11001011.
Теперь можно преобразовать получившееся число в привычный десятичный вид и проверить результат.
1.1001011
1.0110100 - обратный код
1.0110100 + 1 = 1.0110101 - прямой код.
Возвращаем запятую на место
1.01101,01 -> -(8+4+1+1/4)
В десятичном виде это число -13,25
Сложение было выполнено правильно.