[skill] 异或

都怪学习不好,或者老师教的不好。虽然知道异或的算法,但是始终不明白,到底有什么意义。。。直到今天,终于明白了。

还是应该怪我学的不好,不能怪老师。

今天有一个应用场景,写一个函数。这是一个hash表的插入函数,实现的是tcp/ip的流存储。输入是一个以太包,为了在这个表的存下双向包。

需要定义一个hashkey的生成规则。这个规则是,ip+port小的放在前面,大的放在后面,共同组成一个key。所以我需要一个外部的变量来标识

一个以太包在生成key的时候,是否做了源目的信息的对掉。用0/1表示。然后通过这个值来确定将以太包保存在server list里还是client list里。

如: 0表示server list;  1 表示 client list

但是实际上,在这个函数的外部,又有一个大逻辑。这个外部逻辑可以提供一个输入代表此包属于server list 还是 client list。此逻辑也有 0/1 表示。

于是,当这个值为1的时候,函数里的0便代表client list, 而1便代表server list了。

这个逻辑的实现,便可以用 两个变量异或。V

PS:事实上,以上逻辑并不严谨。而我的代码最终实现的时候,也不是这样的。详细的最终逻辑可以参考代码。

但是,思路已经说明了异或是什么!。

上一篇:js keyup、keypress和keydown事件


下一篇:ionic使用常见问题(八)——PHP无法获取$http的post数据