Вы хотите достичь этого «if (x) then: a, if (y) затем: b, if (x) и if (y) затем: a и b, если ни то, ни другое:». Очевидно, вы подразумеваете, однако, что вы НЕ хотите, чтобы «а» -реакция в случае «x & y» была в верхней части реакции специально для этого случая;и что вам, как правило, нужна только одна реакция.
Вот и все, закодируйте ее в точности так.
if (x && !y) { a(); }
else if(y && !x) { b(); }
else if(x && y) {a(); b(); /* or maybe a_and_b() to make sense */}
else {/* nothing */}
&& !
реализует "но не если ...". Обратите внимание на логический оператор AND &&
вместо битового оператора &
(который я изначально ошибся, более или менее опечатка), который в некоторых случаях случайно получает желаемое поведение. else
s делают "всегда только один".
Последний else {}
без if
превращает "ничего не делать для" ни x, ни y "" в
"ничего не делать для любого случаяявно не охвачено ". Это практика, которую я рекомендую, чтобы всегда явно кодировать «все остальное», чтобы иметь возможность заметить, когда вы фактически не все возможные случаи.
Для получения всех (в этом случае двух двоичных входов четыре) дела были тщательно разобраны, прочитайте диаграммы Карно Вейча (https://en.wikipedia.org/wiki/Karnaugh_map) и соответствующие логические оптимизации.