Два дополнения Проблемы с дополнением - PullRequest
0 голосов
/ 29 августа 2011

Я работаю над дополнением к двум дополнениям.В основном мне нужно показать сложение от -27 до +31, причем оба числа в двоичном виде используют 6 бит.

Моя проблема с операциями переноса.Может быть, я не делаю это правильно или что-то.

-27 в двоичном формате: 111011
+31 в двоичном виде: 011111

Ответ, который я думаю должен быть следующим:
+4 в двоичном виде: 000010

Вот что я делаю:

Carry  1 1 1 1 1  
- 27   1 1 1 0 1 1
+ 31   0 1 1 1 1 1
-------------------------
Sum:   0 1 1 0 1 0

Что, по моему мнению, равно 52, а не 4.

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Ваша математика неверна.

27 - это 0 1 1 0 1 1 в двоичном формате (обратите внимание на начальный 0, который я добавил для знака)

-27 - это 1 0 0 0 1 1 в двух дополнениях.

когда вы с этим посчитаете, вы получите правильный результат.


Вот «трюк» для быстрого выполнения дополнения до двух.

Начиная с LSB, копируйте числа точно до тех пор, пока не встретите 1-й ноль, а затем скопируйте и этот ноль. После этого переверните все биты, пока не появится MSB.

Это эквивалентно переключению всех битов (одно дополнение) и добавлению одного (чтобы превратить его в дополнение двух), но только за один шаг.

1 голос
/ 29 августа 2011

Хммм, 31 - 27 = 4, правильно!:)

4 is 100 в двоичном формате, но вы уверены, что -27 is 111011 ???

...