добавить 8-битные двоичные числа со знаком - двоичная арифметика - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь добавить 8-разрядные числовые числа со знаком: 10111000 + 00010111

  0   1 1 0 0 0 0 0        carry

  1   0 1 1 1 0 0 0        (-56)
+ 0   0 0 1 0 1 1 1      + (+23)
____________________     ________
      1 0 0 1 1 1 1   !=   (-33)

Я знаю, что старший значащий бит (MSB) - это знаковый бит, и его не следует добавлять.Тем не менее, я не получаю (-33) в качестве ответа в двоичном виде, и, похоже, переполнение также не наблюдается.Я не уверен, правильно ли я это делаю.Пожалуйста, помогите.

1 Ответ

2 голосов
/ 28 сентября 2019

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

  0 0 0 1 1 1 0        borrow

  0 1 1 1 0 0 0        (56)
- 0 0 1 0 1 1 1      - (23)
____________________ ________
  0 1 0 0 0 0 1   ==   (33)

Взяв знак большей величины (56), вы получите окончательное число 1 0 1 0 0 0 0 1.

...