异或操作在算法中有比较广泛的应用,最为经典的要属不利用额外空间交换两个变量的值。虽然可以利用二进制进行推导但是始终无法直观的记忆。下面我们就利用高中所学过的知识,直观的推导异或操作中两个定律,加深记忆。
异或操作就是一个逻辑问题,高中学过的集合知识也是一种逻辑问题,既然集合问题可以和图形联系起来,那么为什么异或操作不能呢。
异或和集合的假象联系
我们可以利用几何图形的面积代表集合,两个集合的交集就是图像重合的面积,并集就是两个图像在纸张上的实际面积(注意是实际面积,不是面积加和)
由于二进制每一位的异或运算是独立的
,并不受其他位的影响,那么我们就可以把一串二进制数抽象成一个长纸条,每一位的区域都是固定的,如果这一位是1,那么这一位所对应的区域就是涂满的,相反,对应的区域就是空的,这个纸条上所有有面积的加和就是这个二机制对应的集合。
现在我们将二进制抽象称为面积表示。
异或操作在逻辑上就是或与非,映射到集合上,就是两个圆的没有重叠的面积的总和
根据上面这条红色的字,我们就可以对两条二进制纸带做异或运算了,就是把两条纸袋重合,然后抛去相互重叠的面积,最终得到的面积就是那个异或的值。
纸条名 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
a纸条 | 有 | 有 | 有 | 有 | ||||
b纸条 | 有 | 有 | 有 | 有 | ||||
(a^b)纸条 | 有 | 有 | 有 | 有 |
如果我们再进一步的抽象,把这个纸条堪称一张白纸上的一个圆,(这张白纸上每一位对应的区域是固定的)
,先花一个a圆,再一个b圆,由于每一位在白纸上对应的区域是固定的,如果a对应位和b对应位都是1,那么a和b在纸上的这个区域是重合的。那么a^b的面积是什么呢?就是下边这个
根据面积我们就可以正面好多东西啦~
比如说交换律和结合律
如上图所示
交换律:很好懂,因为每一位区域是固定的,所以无论是怎样的顺序,都不影响a圆和b圆在纸上的位置。自然面积也是一样的。
结合律:同理
网友评论