Разность двоичных чисел

Рейтинг: 0Ответов: 1Опубликовано: 22.11.2014

Привет.

Сделал побитово сложение двоичных чисел, а вот как сделать разность двух двоичных чисел, а именно когда уменьшаемое меньше вычитаемого, например, 10-111 (в двоичной системе), когда в конце занять уже не у кого. Мне нужно, чтобы в ответе было отрицательное. Не пойму, как это можно организовать.

Ответы

▲ 3Принят

Записывайте двоичное представление числа в дополнительном коде. Тогда вы сможете заменить вычитание A - B на сложение A + (-B). Изменение знака у числа в дополнительном коде осуществляется инверсией его битов и прибавлением 1. После осуществления операции вычитания не забудьте правильно (с учётом дополнительного кода) проинтерпретировать результат. В вашем случае вычитание будет выглядеть так:

  1. Записываем -111 в дополнительном коде. Для этого инвертируем исходное число (000) и прибавляем 1 (001). В старший разряд записываем 1 (это означает, что число отрицательное), получаем 1001.
  2. Складываем 10 + 1001 = 1011.
  3. Помним, что 1011 - запись числа в дополнительном коде. Старший разряд отвечает за знак: 1 - это -, 0 - это +. Если старший разряд 0, то он отбрасывается, а остальное число интерпретируется как положительное. Если старший разряд 1, то число отрицательное, и его нужно инвертировать также, как мы сделали это с исходным числом. То есть, 1011 -> 011 -> 100 -> 101. Получаем 10 - 111 = -101 (2 - 7 = -5) в прямом коде или 0010 + 1001 = 1011 в дополнительном.