Если a и b одинаковы, то a^b
равно нулю. Таким образом, !(a^b)
не равен нулю только тогда, когда a и b одинаковы. Предположим, что ваша платформа может делать логическое «не» без ветки, поэтому вы можете проверить, является ли a членом (u, v, w) с одной веткой, используя:
if(!(a^u) | !(a^v) | !(a^w))
И, следовательно, все ли (x, y, z) являются членами (u, v, w), используя:
if(
(!(a^u) | !(a^v) | !(a^w))) &
(!(b^u) | !(b^v) | !(b^w))) &
(!(c^u) | !(c^v) | !(c^w))))
т.е. просто делаю бит по разным результатам и опять же только одну ветку.
Если вашей платформе требуется ветвь для выполнения !
, например, если он выполняется по существу как a ? 0 : -1
, то это десять условий и не лучше, чем наивное решение.