XOR of three values

前端 未结 8 941
执念已碎
执念已碎 2020-12-02 23:04

What is the simplest way to do a three-way exclusive OR?

In other words, I have three values, and I want a statement that evaluates to true IFF only one of

8条回答
  •  清歌不尽
    2020-12-02 23:27

    For exactly three terms, you can use this expression:

    (a ^ b ^ c) && !(a && b && c)
    

    The first part is true iff one or three of the terms are true. The second part of the expression ensures that not all three are true.

    Note that the above expression does NOT generalize to more terms. A more general solution is to actually count how many terms are true, so something like this:

    int trueCount =
       (a ? 1 : 0) +
       (b ? 1 : 0) +
       (c ? 1 : 0) +
       ... // more terms as necessary 
    
    return (trueCount == 1); // or some range check expression etc
    

提交回复
热议问题