Удаление положительного числа из отрицательного - дополнение до двух

Используя форму дополнения до двух, мне нужно с 8 битами выполнить следующее:

  • Вычтем 45 из -20.

Другой способ, который вы могли бы спросить, - это сказать «отнять 45 от -20 или -20-45», или, опять же, иначе будет «-20 + -45».

Я считаю, что я должен получить двойное дополнение -20 (11101100), а затем добавить его к двойному дополнению -45 (11010011) или наоборот. Это дало бы мне:

  1110 1100
  1101 0011
= 1111 1111

Это явно неверно. Что я делаю неправильно?


person Oliver Reid    schedule 13.03.2016    source источник


Ответы (1)


Ваша ошибка связана со вторым MSB - вы добавили 1 + 1 к 1, где на самом деле + - это в основном операция XOR, поэтому 1 + 1 должно было быть 0, а затем вы несете 1.

-20 + -45 - правильный способ его вычисления, и он должен быть:

  1
  1110 1100
  1101 0011 
  ---------
= 1011 1111

По сути, для MSB у вас есть 1+1+1, что эквивалентно 0+1 (или 1+0), что, конечно, равно 1.

Таким образом, вы получили 10111111, что равно -65 в десятичной системе:

-2^7 + 2^5 +2 ^4 + 2^3 + 2^2 + 2^1 + 2^0
= -128 + 32 + 16 + 8 + 4 + 2 + 1
= -65
person Ori Lentz    schedule 13.03.2016
comment
Ты сейчас мертв, а теперь я чувствую себя глупо! Я представляю себе случай функциональной неподвижности. Спасибо! - person Oliver Reid; 13.03.2016