证明异或结合律

44 阅读1分钟

证明异或结合律

再交换2个数的算法中,若能证明异或结合律,便可以很简单的理解算法原理。

交换算法:

int x, y;
x ^= y;
y ^= x;
x ^= y;

假设x,y的初始值为x0,y0,

第3行,y ^= x,展开便是 y = (x0 ^ y0) ^ y0;

    若 (x0 ^ y0) ^ y0 等于 x0 ^ (y0 ^ y0),

    则 y = x0 ^ (y0 ^ y0) = x0 ^ 0 = x0

第4行,x ^= y, 展开便是 x = (x0 ^ y0) ^ x0 = (y0 ^ x0) ^ x0;

    若 (y0 ^ x0) ^ x0 等于 y0 ^ (x0 ^ x0),

    则 x = y0 ^ (x0 ^ x0) = y0 ^ 0 = y0

真值表证明异或结合律

xyz(x 异或 y) 异或 zx 异或 (y 异或 z)
00000
00111
01011
01100
10011
10100
11000
11111