Сложение и вычитание дополнения до двух - PullRequest
6 голосов
/ 07 октября 2010

Используя 6-битное представление «один и два», я пытаюсь решить следующую проблему:

12 - 7 

Теперь я беру 12 в двоичном и 7 в двоичном первых.

12 = 001100 - 6 bit 
7 =  000111 - 6 bit

Тогда, я бы тогда перевернул бит для дополнения до двух и добавил одно?

12 = 110011 ones complement 
     +    1
    -------
     001101

7  = 111000 ones complement 
    +     1
   ---------
      111001

затем, добавил бы эти два дополнения вместе

 001101
+111001
-------
1000110 = overflow? discard the last digit?  If so I get 5

Теперь, если у меня есть число типа

-15 + 2

Затем я бы добавил величину знака на MSB, если это ноль?

вроде:

-15 = 001111 6 bit

Я бы добавил 1 в конце здесьпрежде чем я переверну биты?

  = 101111

Ответы [ 2 ]

15 голосов
/ 07 октября 2010

Использование дополнения до двух для представления отрицательных значений имеет то преимущество, что вычитание и сложение одинаковы.В вашем случае вы можете думать о 12 - 7 как 12 + (-7).Следовательно, вам нужно только найти представление дополнения до -7 и добавить его к +12:

12  001100
-7  111001   -- to get this, invert all bits of 7 (000111) and add 1
----------
 5 1000101

Затем отбросить перенос (указывает на переполнение), и вы получите свой результат: 000101, который равен5, как и ожидалось.

Для вашего примера -15 + 2 просто следуйте той же процедуре, чтобы получить представление дополнения до -15:

15  001111
    110000   -- inverted bits
    110001   -- add 1

Теперь выполните сложение как обычно:1013 *

-15  110001
  2  000010
-----------
res  110011

Чтобы увидеть, что res действительно равен -13, вы можете видеть, что он отрицательный (установлен MSB).Для получения величины преобразуйте в положительное значение (инвертируйте биты, добавьте 1):

res  110011
     001100  -- inverted bits
     001101  -- add 1

Следовательно, ожидаемая величина равна 13.

2 голосов
/ 07 октября 2010

Нет.Алгоритм для дополнения до двух не меняется в зависимости от того, где находится отрицательное значение.

...