在平时看各种框架的源码的过程中,经常会看到一些位移运算,所以作为一个Java开发者是一定掌握位移运算的。
01 正数位移运算
Java中有三个位移运算:
① <<:左移
② >>:右移
③ >>>:无符号右移
我们直接看一下Demo:
System.out.println(2 << 1); // 4 System.out.println(2 >> 1); // 1 System.out.println(2 >>> 1); // 1 System.out.println(-2 << 1); // -4 System.out.println(-2 >> 1); // -1 System.out.println(-2 >>> 1); // 2147483647
乍一眼看到上面Demo的打印结果,你应该是懵逼的,接下来我来解释一下这个结果到底是如何运算出来的。
上面的Demo中有“2”和“-2”,这是两个十进制数,并且是int类型的(java中占四个字节),位运算是基于二进制bit来的,所以我们需要将十进制转换为二进制之后再进行运算:
2 << 1:十进制“2”转换成二进制为“00000000 00000000 00000000 00000010”,再将二进制左移一位,高位丢弃,低位补0,所以结果为“00000000 00000000 00000000 00000100”,换算成十进制则为“4”