При добавлении чисел со знаком переполнение произошло, если вы добавили два числа с одинаковым знаком и получили результат с другим знаком. Из-за задействованных диапазонов невозможно создать переполнение при добавлении двух чисел разных знаков.
Итак, что вы можете сделать - наблюдать только за знаковым битом (самый старший из двух дополнений) - использовать исключающее ИЛИ, чтобы узнать, отличались ли два исходных числа по знаку, дополнить это так, чтобы вы получили ' 0 'если они разные,' 1 'для одного и того же.
Затем вы можете использовать исключающее ИЛИ для результата вместо одного из входов. Это даст «0», если они будут одинаковыми, «1», если они будут разными.
И эти два результата вместе, чтобы получить общее «1», если два входа были одинаковыми, но результат был разным, «0» в противном случае.
Затем вы можете использовать комбинацию сдвигов и OR для заполнения целого числа этим значением. Предположим, что вы используете 32-разрядное целое число, просто установите младшие 31 бит, чтобы получить положительное целое число с наибольшим значением. То, что вы можете затем сделать, это аналогичные наборы сдвигов и ИЛИ на знаковом бите любого из входов. Эксклюзив ИЛИ результаты. Вместо этого это даст наименьшее целое число, если входные данные были отрицательными.
РЕДАКТИРОВАТЬ: о, и использовать битовое значение того, было ли переполнение, расширенное, чтобы заполнить целое число, чтобы выбрать, какое значение вернуть, добавив к нему результат, который вы вернете, если будет переполнение, дополните его и добавьте и с нормальным аддитивным результатом, затем объединяя (или складывая) их вместе.
Presto: вся двоичная логика, без условий. Я полагаю, потому что это домашнее задание, что вам не нужен настоящий код?