如果有一堆数据,我们想将这些数据通过HASH的方式,放入到桶中。
我们可以将桶进行编号,比如0号,1号,...N号桶。
给我们一个数据,我们要完成这个数据和桶的序号的映射转化关系,这样放入和查找就可以了。
由于对于任何一个非负数A,进行A%B,得到的必然是[0,B-1]区间内,所以我们可以利用%的特性来完成这个转化关系!
其实,&也可以完成这一过程!而且&是CPU级别的位运算,会更快些!
要知道A&B,得到的一定是[0,B]区间内,真是神奇!
因为,&其实是一个置0的操作,比如A&B,也就是说将A的二进制中出现0的位置都反映到B对应的位置上,因此A&B是一个变小的过程!
但是,注意到比如B是10,对应二进制是1010,也就是说不论A是什么,A&B得到的二进制的一号位,三号位必然是0【假设从右至左开始】。那么A&B将取不到一些数,比如3,意味着3号桶将始终得不到数据!因此如果选择&,那么B的二进制一定要是连续的1,不能出现0位。
|