Вычитание значения само по себе с использованием дополнения до 2

Используя метод вычитания с дополнением до 2, мой результат равен 1111 (-1 в десятичной системе), тогда как в следующем случае он должен быть равен 0.

  10010
 -10010

где оба значения представлены в двоичном формате.

Ответ кажется вполне очевидным, но использование метода преобразования отрицательного значения в дополнение до 2 с последующим добавлением его, похоже, не работает в этом случае, поскольку результат, по-видимому, равен 1111.

Спасибо


person user3927312    schedule 17.08.2014    source источник


Ответы (2)


Вычитание числа из самого себя с использованием дополнения до 2 означает, что вы добавляете его дополнение до 2 (вычитание числа добавляет его дополнение до 2):

Вам нужно знать размер слова в битах, чтобы определить завершение двойки, поэтому давайте предположим, что количество битов в слове равно 8. Тогда у вас есть 00010010 в качестве исходного числа и 11101110 в качестве его дополнения до 2. Дополнение до 2 — это дополнение до 1 (11101101) с добавленным к нему 1.

Затем добавьте:

 00010010   [original number, 18 decimal]
+11101110   [2's complement, -18 decimal]
---------
 00000000   [note: there's a 1 overflow bit]
person lurker    schedule 17.08.2014

10010 в дополнении до двух (при условии, что 5-битное дополнение до двух) равно -14 (-16 +2). 14 в дополнении до двух равно 01110 (2+4+8). Так

 10010
-10010
=
 10010
+01110
=
 00000 (actually 100000, but the 1 is overflowed)
person Patrick Mackinlay    schedule 17.08.2014