证明异或结合律
再交换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
真值表证明异或结合律
x | y | z | (x 异或 y) 异或 z | x 异或 (y 异或 z) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 0 |
1 | 0 | 0 | 1 | 1 |
1 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 |