JAVA中的>>和>>>号以及<<号的作用
1 public static void main(String[] args) { 2 3 //右移2位,输出结果为2。二进制1000右移2位变为0010 4 System.out.println(8>>2); 5 //等同于 8除以2的3次方,即8/Math.pow(2,3)。输出为1 6 System.out.println(8>>>3); 7 8 //左移2位,输出结果为8。二进制0010左移2位变为1000 9 System.out.println(2<<2); 10 //语法错误,不支持 11 System.out.println(8<<<3); 12 13 }
1、 >>带符号右移。正数右移高位补0,负数右移高位补1
快速记忆:相当于除以一个值,正数除完后最小值为0,负数除完最大值为-1
2、 >>>无符号右移。无论是正数还是负数,高位通通补0
快速记忆:正数相当于除以一个值,最小值为0
负数比较麻烦,暂时没有找到快速记忆方法,有同学知道的可以告知
3、 <<表示左移,不分正负数,低位补0
快速记忆:不管正负数,相当于乘以一个数
1 public static void main(String[] args) { 2 // >>带符号右移。正数右移高位补0,负数右移高位补1 3 System.out.println("====================== >>带符号右移 ========================================="); 4 System.out.println("----------------正数举例----------------------"); 5 // 8的2进制表示为1000 6 System.out.println(Integer.toBinaryString(8)); 7 // 输出向右移动两位 8 System.out.println(8>>2); 9 // 输出向右移动两位的二进制0010 即:十进制的2 10 System.out.println(Integer.toBinaryString(8>>2)); 11 System.out.println("-----------------正数超出位数举例---------------------"); 12 13 System.out.println(Integer.toBinaryString(8)); 14 System.out.println(8>>6); 15 System.out.println(Integer.toBinaryString(8>>6)); 16 17 System.out.println("----------------负数举例----------------------"); 18 System.out.println(Integer.toBinaryString(-8)); 19 System.out.println(-8>>2); 20 System.out.println(Integer.toBinaryString(-8>>2)); 21 System.out.println("-----------------负数超出位数举例---------------------"); 22 23 System.out.println(Integer.toBinaryString(-8)); 24 System.out.println(-8>>6); 25 System.out.println(Integer.toBinaryString(-8>>6)); 26 // >>>无符号右移。无论是正数还是负数,高位通通补0 27 System.out.println("====================== >>>无符号右移 ========================================="); 28 System.out.println("----------------正数举例----------------------"); 29 System.out.println(Integer.toBinaryString(8)); 30 System.out.println(8>>>2); 31 System.out.println(Integer.toBinaryString(8>>>2)); 32 System.out.println("-----------------正数超出位数举例---------------------"); 33 34 System.out.println(Integer.toBinaryString(8)); 35 System.out.println(8>>>6); 36 System.out.println(Integer.toBinaryString(8>>>6)); 37 38 System.out.println("----------------负数举例----------------------"); 39 System.out.println(Integer.toBinaryString(-8)); 40 System.out.println(-8>>>2); 41 System.out.println(Integer.toBinaryString(-8>>>2)); 42 System.out.println("-----------------负数超出位数举例---------------------"); 43 System.out.println(Integer.toBinaryString(-8)); 44 System.out.println(-8>>>6); 45 System.out.println(Integer.toBinaryString(-8>>>6)); 46 // <<表示左移,不分正负数,低位补0 47 System.out.println("====================== <<左移 ========================================="); 48 System.out.println("----------------正数举例----------------------"); 49 System.out.println(Integer.toBinaryString(8)); 50 System.out.println(8<<2); 51 System.out.println(Integer.toBinaryString(8<<2)); 52 53 System.out.println("----------------负数举例----------------------"); 54 System.out.println(Integer.toBinaryString(-8)); 55 System.out.println(-8<<2); 56 System.out.println(Integer.toBinaryString(-8<<2)); 57 }