前言
我们都知道对于有符号数据类型,二进制最左端的数字为符号位,0代表正,1代表负,这里先介绍几个概念
逻辑左移=算术左移:高位溢出,低位补0 
 逻辑右移:低位溢出,高位补0 
 算术右移:低位溢出,高位用符号位的值补
比如一个有符号位的8位二进制数10101010,[]是添加的数字
逻辑左移一位:0101010[0] 
 逻辑左移两位:101010[00] 
算术左移一位:0101010[0] 
 算术左移两位:101010[00] 
逻辑右移一位:[0]1010101 
 逻辑右移两位:[00]101010 
算术右移一位:[1]1010101 
 算术右移两位:[11]101010
算术左移和算术右移主要用来进行有符号数的倍增、减半 
 逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半 
 (Java中是没有无符号数据类型的,C和C++中有)
符号  | 例子  | 解释  | 
<<  | num<< n  | 相当于 num×2n                                    n                         u                         m                              ×                                         2                            n                              ,算数左移(逻辑左移)  | 
>>  | num>>n  | 相当于num2n                                              n                            u                            m                                            2                            n                              ,算数右移  | 
>>>  | num>>>n  | 逻辑右移,当num为正数和算术右移一个效果  | 
public static void main(String[] args) {
    // 20
    System.out.println(10 << 1);
    // -20
    System.out.println(-10 << 1);
    // 5
    System.out.println(10 >> 1);
    // -5
    System.out.println(-10 >> 1);
    // 5
    System.out.println(10 >>> 1);
    // 2147483643
    System.out.println(-10 >>> 1);
}参考博客
 [1]https://jingyan.baidu.com/article/5552ef47e5618d518ffbc9db.html 
 [2]https://wenku.baidu.com/view/35f45e711711cc7931b716ef.html 
 [3]https://zhidao.baidu.com/question/318471799.html  










