Понимание сложения дополнения до двух

Я построил четырехбитный сумматор / вычитатель, использующий 4,1-битные полные сумматоры, а вход и выход - это числа с дополнением до двух.

Если X=0111 and Y=1000, их сумма, очевидно, равна 1111.

В десятичном виде это эквивалентно 7 + 8, таким образом, 15 - это результат суммы.

Однако я сбит с толку, нужно ли преобразовать этот результат обратно в «обычный» двоичный код, перевернув биты и добавив единицу? Таким образом, ответом будет 0001, представляющий 1 в десятичной системе счисления. И то, что Y в десятичной системе счисления перед переводом было на самом деле 0110, представляющим 6, таким образом давая следующее в двоичном формате 7-6 = 1. Если бы кто-нибудь мог указать мне правильное направление, я был бы признателен!


person ZAX    schedule 15.04.2013    source источник


Ответы (1)


Похоже, у вас неверное преобразование для Y. Y = 1000 2 = -8 10.

Чтобы представить -6, вы берете 0110, переверните биты, чтобы получить 1001, и добавьте единицу, так что Y = 1010 (и 0111 + 1010 = 0001, как вы ожидаете.)

Чтобы вернуться назад, переверните биты 1010 = 0101 и добавьте единицу, получив 0110 = 6.

Отредактируйте, чтобы ответить на следующий вопрос:

Позволять:

X = 0111
Y = 1100

X + Y = 0011 (ignoring overflow)

Итак, что бы мы ни добавляли, оно равно 3. Мы знаем, что X = 7.

Y = 1100 => 0011 + 1 = (negative)0100 = -4

7 + (-4) = 3

Перевод не требуется, просто правильно представляйте положительные и отрицательные числа. Я думаю, ваше замешательство происходит из-за того, что мы «отрицаем» отрицательные числа, чтобы найти абсолютное значение этого числа, и ставим перед ним отрицательный знак, как в приведенном выше преобразовании Y. Это потому, что отрицательные числа в дополнении 2 не так читаемы, как положительные числа, но 0100 по-прежнему +4, а 1100 по-прежнему -4.

person beaker    schedule 15.04.2013
comment
Я все еще в замешательстве. Возможно, это проясняет ситуацию. Глядя на заданные x = 0111 и y = 1000, с суммой 1111, что бы результат, 1111 преобразовался в десятичный формат, и что изначально было бы y в десятичном? - person ZAX; 15.04.2013
comment
7-8 = -1: возьмите 1111, переверните биты на 0000 и добавьте единицу, чтобы получить (отрицательное) 0001. - person beaker; 15.04.2013
comment
И для полноты: 1000 - это 0111 + 1 = (отрицательное) 1000 или -8. - person beaker; 15.04.2013
comment
ах большое спасибо! Может быть, ты захочешь помочь мне еще с одним? Если я сохраню значение x на 0111, но изменю y на 1100, сумма будет 0011. Следуя описанной выше процедуре, я вижу, что y, 1100 должно быть 0100 или 4. Таким образом, операция должна быть 7-4 = 3 (в десятичный). 3 представлен как 0011, что является результатом без прохождения результата через описанную процедуру дополнения до 2. Мне нужно переводить, только если первая цифра равна 1? Или я все еще чего-то не понимаю? - person ZAX; 15.04.2013
comment
Итак, я предполагаю, что краткий ответ на этот последний вопрос - да, только числа с установленным старшим (знаковым) битом отрицательны. Хотя вы должны быть осторожны с тем, когда можно и нельзя игнорировать переполнение. - person beaker; 15.04.2013