今天在学习hashmap源码时偶然看到这样一段代码:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
我当场失忆了,(h = key.hashCode()) ^ (h >>> 16)这是啥?很熟悉但是又想不起来是什么了(大佬不要笑我,我很菜的)。
吓得我马上去查了一下啊。
现在介绍一下这三个东西:异或,与,或;
一、异或(^)
以二进制的方式进行运算,同0异1,返回十进制数;比如14^10转化成二进制1110^1010结果为0100,也就是4;
二、与(&)
以二进制的方式进行运算,0&0=0,0&1=0,1&0=0,1&1=1,返回十进制数;比如14&10转化成二进制1110&1010结果为1010,也就是10;
三、或(|)
以二进制的方式进行运算,0|0=0,0|1=1,1|0=1,1|1=1,返回十进制数;比如14|10转化成二进制1110|1010结果为1110,也就是14;
非常简单的东西但是让很多像我这样使用不多的人经常忘记,所以写下来记录一下!
最后再说一个取余小技巧:
&是可以用来对2的n次方数取余的,比普通的%取余要快,但仅限于对2的n次方数取余,方法为数&2的n次方数-1;
比如:25&(16-1)(2的四次方)
计算过程:
11001&01111=1001(9)
至于为什么只能对2的n次方数取余,从计算过程就可以看出。
版权声明:本文为qq_49169308原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。