java 位移运算符
1 2 //因为java中的int型占用4个字节,也就是32个二进制位(二进制中八位一个字节)。 3 // 对于移位运算如果你移动了32位,那么所有的位都移出了,就没什么意义了, 4 // 所以系统会先将移动的位数对32取模。 5 //在进行位运算之前, 要先进行模的32位运算 6 int i = -5; 7 System.out.println("1: \t"+Integer.toBinaryString(i)); 8 //二进制右移 ----除以2 9 int a=i>>1; 10 System.out.println("i>>1: \t"+Integer.toBinaryString(a)); 11 a=i>>32; 12 System.out.println("i>>32: \t"+Integer.toBinaryString(a)); 13 //二进制左移 ----乘以2 14 int b=i<<1; 15 System.out.println("i<<1: \t"+Integer.toBinaryString(b)); 16 b=i<<32; 17 System.out.println("i<<32: \t"+Integer.toBinaryString(b)); 18 //二进制 无符号右移 最高位补0 只是对32位和64位的值有意义 19 int c=i>>>1; 20 System.out.println("i>>>1:\t"+Integer.toBinaryString(c)); 21 c=i>>>32; 22 System.out.println("i>>>32:\t"+Integer.toBinaryString(c));
1: 11111111111111111111111111111011
i>>1: 11111111111111111111111111111101
i>>32: 11111111111111111111111111111011
i<<1: 11111111111111111111111111110110
i<<32: 11111111111111111111111111111011
i>>>1: 1111111111111111111111111111101
i>>>32: 11111111111111111111111111111011