java 位移操作

移位操作: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,然后再使用上面提到的通用移位运算规则进行移位。




posted @ 2013-09-02 23:06  菜园的鸟  阅读(411)  评论(0编辑  收藏  举报