Java中的>>,>>>

前言
我们都知道对于有符号数据类型,二进制最左端的数字为符号位,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,算数左移(逻辑左移)

【Java中的>>,>>>】num>>n 相当于num2n,算数右移
num>>>n 逻辑右移,当num为正数和算术右移一个效
@Test public void test1() { //System.out.println(1<<1); //System.out.println((float) (1>>1)); int num = 10; System.out.println(Integer.toBinaryString(0)); System.out.println(Integer.toBinaryString(1)); System.out.println(Integer.toBinaryString(2)); System.out.println(Integer.toBinaryString(3)); System.out.println(Integer.toBinaryString(4)); System.out.println(Integer.toBinaryString(5)); System.out.println(Integer.toBinaryString(100)); System.out.println("-------------"); //System.out.println(Integer.toBinaryString(6)); System.out.println(Integer.toBinaryString(8)); System.out.println(Integer.toBinaryString(16)); System.out.println(Integer.toBinaryString(13)); System.out.println(Integer.toBinaryString(~13)); System.out.println("-------------"); System.out.println(Integer.toBinaryString(num)); System.out.println(Integer.toBinaryString(num << 1)); System.out.println(Integer.toBinaryString(num>>1)); System.out.println(Integer.toBinaryString(num>>2)); System.out.println(Integer.toBinaryString(num>>4)); System.out.println("---------------"); System.out.println(Integer.toBinaryString(2 & 3)); System.out.println(Integer.toBinaryString(2 | 3)); System.out.println(Integer.toBinaryString(~2)); System.out.println(Integer.toBinaryString(~3)); System.out.println("---------------"); System.out.println(200 & ~200); System.out.println("---------------"); //无符号右移运算符>>> 只是对32位和64位的值有意义 System.out.println(Integer.toBinaryString(~2>>>4)); System.out.println(Integer.toBinaryString(~2>>>33)); // 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); //result://0 //1 //10 //11 //100 //101 //1100100 //------------- //1000 //10000 //1101 //11111111111111111111111111110010 //------------- //1010 //10100 //101 //10 //0 //--------------- //10 //11 //11111111111111111111111111111101 //11111111111111111111111111111100 //--------------- //0 //--------------- //1111111111111111111111111111 //1111111111111111111111111111110 //20 //-20 //5 //-5 //5 //2147483643 }

    推荐阅读