移位操作:x << n(左移,n只能是整数)
左移:
private void testByte1() {
for (int i = 0; i < 100; i++) {
System.out.println("i = " + (i << 1) + "\n\r");
}
}输出:i = 0
i = 2
i = 4
i = 6
i = 8
i = 10
i = 12
右移:
private void testByte2() {
for (int i = 0; i < 10; i++) {
System.out.println("i = " + Integer.toHexString((0x80000000 >> i)) + "\n\r");
}
}输出:i = 80000000 i = c0000000 i = e0000000
因为:0x80000000 二进制是11100000000 ,符号位为1就在右边补1,0则补0
若:
System.out.println(Integer.toHexString(0x80000000 >> 32));
输出:ffffffff
System.out.println(Integer.toHexString(0x80000000 >> 32));输出为:80000000
总结:0x80000000在右移31位后,每个位都成了1(也就是-1),按照这个想法,右移32位理所当然的还是-1,可是右移32位后,得到的结果却又这个数本身。通过对int,long类型数据左右移进行测试,发现:Java对移位运算"a
<> b"的处理,首先做 b mod 32||64运算, 如果a是int型,取mod 32,如果a是double型,取mod 64,然后再使用上面提到的通用移位运算规则进行移位。