浅谈异或(^),与(&),或(|)

今天在学习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版权协议,转载请附上原文出处链接和本声明。