Оценка 0xfb-0xfa - PullRequest
       9

Оценка 0xfb-0xfa

0 голосов
/ 04 февраля 2019
0xfb-0xfa

Сначала я перешел к двоичному

0xfb=11111011

0xfa=11111010

-0xfa=00000101+1=00000110

Теперь 11111011+00000110=100000001, что является недостаточным, но, безусловно, неверным, где я ошибся?

1 Ответ

0 голосов
/ 05 февраля 2019

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

Если исходные числа не подписаны, первоначальное преобразование неверно.Ваши данные 8-битные, когда закодированы в двоичном виде как без знака.Если вы хотите преобразовать их в дополнение 2s без усечения, вам нужен дополнительный бит.Итак,

+0xfb = 0 11111011
+0xfa = 0 11111010
-0xfa = 1 00000110

Теперь мы можем вычислить сложение

        (1)
  0xfb     0 11111011
 -0xfa   + 1 00000110
           ----------
           0 00000001   

Мы можем заметить, что переполнения нет.Есть выполнение, но мы можем просто проигнорировать его в дополнении 2s.И сумма положительного и отрицательного числа не может переполниться.

Теперь, когда два MSB равны, результат может быть сокращен до 8 бит, что дает очевидный результат 1.

Если начальные числаподписаны, большинство ваших расчетов правильно.Все операции могут быть выполнены на 8 битах.И результат будет на 8 битах.

        (1)
  0xfb     11111011
 -0xfa   + 00000110
           ----------
           00000001   

Выполнение выполнено, но не переполнено или не переполнено.Результат верный.

...