试图确认 XOR 的数学 属性

Trying to confirm XOR's mathematical property

XOR 运算符的下列 属性 正确吗?

A XOR B = C
A XOR C = B
B XOR C = A

你会怎么称呼这个 属性?

这可以在这里测试。让我知道是否有任何情况 属性 不成立:

int main() {
    unsigned a = 128;
    unsigned b = 34;
    unsigned c = a ^ b;

    printf("a ^ c = %u\n", a ^ c);  // Gives you b (34)
    printf("b ^ c = %u\n", b ^ c);  // Gives you a (128)
}

我觉得不是,上面可以写成

A XOR A XOR B

这里A异或A为0

所以结果是0 XOR C = C

我认为这样的 属性 没有名字。它暗示了 异或 的其他属性(有关详细信息,请参阅 Exclusive Or wiki)。

证明如下:

If a^b = c, then

    a^c = a^(a^b) = 
    <by associativity> 
    = (a^a)^b = 
    = 0^b = b

Involution “一个参数给定值的 XOR 按位运算是对合。”