试图确认 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 按位运算是对合。”
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 按位运算是对合。”