#binary #boolean #addition #digital #boolean-algebra
Вопрос:
Допустим, я хочу добавить 4 двоичных числа в дополнение к 2: a b c d. У меня есть схема, которая может добавлять 2 двоичных числа одновременно и которая определяет, произошло ли переполнение на соответствующую сумму (используя XOR с последними битами переноса).
При добавлении нескольких чисел в дополнение 2 возможно, что промежуточные суммы переполняются, в то время как конечный результат этого не делает. Например:
4 5 (-6) , выраженные 4 битами и C2:
0100
0101
====
1001 (-7 : overflow)
1001
1010
====
0011 (3, the correct result)
Мой вопрос: как я могу узнать, при добавлении 4 двоичных чисел с N битами, переполняется ли конечный результат или нет? Существует ли какое-либо логическое выражение или схема, которые могут автоматически определять, когда происходит переполнение?
Ответ №1:
В вашем примере 0100 0101, представленные 4 битами, дают аппаратный результат 1001.
Теперь вам решать, как вы интерпретируете эти биты.
Если вы интерпретируете их как целые числа, дополняющие 2, результат будет неправильным (десятичное число -7, переполнение).
Если вы интерпретируете их как целые числа без знака, результат будет правильным (десятичное число 9).
Если вы добавите 1010, вам придется подумать о том, как интерпретировать эти биты. Без знака, они десятичные 10, дополнение 2, они десятичные -6.
Тем не менее, это зависит от вас, как вы интерпретируете результат. Это 0011 плюс бит переноса, так как 1001 1010 дает 10011.
Таким образом, проблема возникает из-за того, что вы меняете интерпретацию битов во время вычисления.
Это не может быть обработано никаким логическим выражением или схемой.
Комментарии:
1. Спасибо за ответ, но я уточнил тот факт, что интерпретирую числа только как в дополнительном представлении 2. Я не меняю интерпретацию результатов ни на каких этапах. Целью примера было продемонстрировать утверждение: «при добавлении более 2 двоичных чисел с N битами возможно, что конечный результат является правильным (не переполняется), даже если промежуточные суммы могут переполниться». Итак, проблема в следующем: при добавлении нескольких двоичных чисел в дополнение 2, как можно определить, действительно ли конечный результат переполняется или находится в пределах допустимого диапазона?
2. Если вы интерпретируете все числа только как дополнение 2, у вас есть 4 5 = -7, что, очевидно, неправильно, как и -7 -6 = 3. Для меня вообще нет смысла спрашивать, дает ли добавление 2 неправильных результата правильный результат.
3. Это свойство чисел в дополнении 2, при добавлении более 2 чисел (каждое из которых имеет одинаковое количество битов) конечный результат может быть правильным, ДАЖЕ ЕСЛИ промежуточные суммы переполняются и не являются правильными. Добавление a b c, где все 3 операнда имеют N битов, sum1=a b может переполниться, sum 2=sum1 c также может переполниться, но результат sum 2 может быть правильным, если результат находится в диапазоне [-2^(N-1) ; ( 2^(N-1) ) — 1], даже если результат sum1 НЕ находится в указанном диапазоне.
4. Вы правы, но только если вы не интерпретируете непосредственный результат как дополнение 2. -7 -6-это окончательно не 3.