![7078adfdb510407db74a823132716108.png](https://img-blog.csdnimg.cn/img_convert/7078adfdb510407db74a823132716108.png)
国庆给自己放了个小长期二十几天,回来继续更新专栏
上一篇文章我们说了Java里的二进制,知道了计算机是以0和1来处理数据的,在阅读源码的过程中,经常会看到这些符号<< ,>>,>>>,这些符号在Java中叫移位运算符,在写代码的过程中,虽然我们基本上不会去写这些符号,但需要明白这些符号的运算原理,比如HashMap中有以下代码:
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//左移
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);//无符号右移
}
上段代码中就包含左移运算符<<,无符号右移运算符>>>。这篇文章详细说一下这三个符号:
1、左移运算符:<<
先随便定义一个int类型的数int,十进制的value = 733183670,转换成二进制在计算机中的表示如下:
![b42ee12e3cdcd32b1ba50b08d7828849.png](https://img-blog.csdnimg.cn/img_convert/b42ee12e3cdcd32b1ba50b08d7828849.png)
value << 1,左移1位
![313e1f374e48b98038c26bda5f6c4538.png](https://img-blog.csdnimg.cn/img_convert/313e1f374e48b98038c26bda5f6c4538.png)
左移1位后换算成十进制的值为:1466367340,刚好是733183670的两倍, 有些人在乘2操作时喜欢用左移运算符来替代。
value << 8,左移8位看一下: