2011-01-26 3 views
1

Я пытаюсь использовать только AND OR XOR и NOT, чтобы определить, будет ли переполнение двух двоичных чисел из 4 бит. Я знаю, например, что что-то вроде 1100 + 0100 закончится как 1 | 0000. Но как я могу найти это, используя только эти логические операторы?Как определить, произошло ли переполнение с использованием AND OR NOT и XOR?

Я пытаюсь получить 1000, когда происходит переполнение, и 0000, когда это не так. Это достаточно просто, так как я могу просто использовать XOR с маской, чтобы очистить последние 3 бита.

У кого-нибудь есть предложения по выяснению этого?

+0

Это полностью зависит от языка, с чем вы работаете? – berry120

+0

Я сейчас пытаюсь сделать это на бумаге. Полагаю, как только я на самом деле выясню, как это сделать, тогда я перейду оттуда. – John

+0

На данный момент я просто пытаюсь выяснить (на бумаге), как использовать операторы для обнаружения переполнения от добавления любых двух двоичных чисел. – John

ответ

0

Я думаю, что это сработает, не используя петли или смены. Но его уродливые:

 
if (
(a & 0x8) && (b & 0x8) || 
(((a & 0x8) || (b & 0x8)) && ((a & 0x4) && (b & 0x4))) || 
(((a & 0x8) || (b & 0x8)) && ((a & 0x4) || (b & 0x4)) && ((a & 0x2) && (b & 0x2))) || 
(((a & 0x8) || (b & 0x8)) && ((a & 0x4) || (b & 0x4)) && ((a & 0x2) || (b & 0x2)) && ((a & 0x1) && (b & 0x1))) 
) { 
    // overflow 
} 
0

Номера ABCD и EFGH,^is AND, | это ИЛИ.

(A^E) | (B^F^(A | E)) | (C^G^(B | F)^(A | E)) | (D^H^(C | G)^(B | F)^(A | E))

Я уверен, что вы можете увидеть шаблон там, поэтому рекурсивное решение довольно просто для чисел с большим количеством бит ,

 Смежные вопросы

  • Нет связанных вопросов^_^