Для примера дам конкретную задачу, есть два десятичных числа: -78 и -36, нужно сложить их в 8-битной сетке. В обратном коде получился результат 10001101, в дополнительном - 10001110. Вопрос знающим - это нормально?
Для примера дам конкретную задачу, есть два десятичных числа: -78 и -36, нужно сложить их в 8-битной сетке. В обратном коде получился результат 10001101, в дополнительном - 10001110. Вопрос знающим - это нормально?
Да, это нормально для отрицательных чисел. Разница должна быть ровно на 1. Это происходит из-за того, что в обратных кодах есть код специального числа "-0". Для того, чтобы это число не учитывалось, к результату сложения в обратных кодах необходимо прибавить еще 1.
Правильный вариант расчетов (8 разрядные числа, старший бит - знаковый):
Число: -78
Прямой код: 11001110
Обратный код: 10110001
Дополнительный код: 10110010
Число: -36
Прямой код: 10100100
Обратный код: 11011011
Дополнительный код: 11011100
Сумма обратных кодов:
10110001 + 11011011 = 10001100
Поскольку отрицательные числа, то добавляем 1
10001101
Переводим из обратного в прямой: -114
Сумма дополнительных кодов:
10110010 + 11011100 = 10001110
Переводим из дополнительного в прямой: -114
Несложно проверить, что (-78) + (-36) = (-114)
Добавить комментарий