java位运算

 1 /**
 2   * 位运算符: &; |; ^; ~; >>; >>>; <<;
 3   */
 4  private void bitOperator() {
 5   byte a = 23; // "00010111"
 6   byte b = 26; // "00011010"
 7 
 8   // 按位与, 两个运算数都为1时,结果为1,其余结果为0
 9   int c = a & b; // "00010010" = 18
10   System.out.println("(c = a & b) = " + c);
11   // 按位或,两个运算数都为0时,结果为0,其余结果为1
12   int d = a | b; // "00011111" = 31
13   System.out.println("(d = a | b) = " + d);
14   // 按位异或,两个运算数相同时结果为0,不同时结果为1
15   int e = a ^ b; // "00001101" = 13
16   System.out.println("(e = a ^ b) = " + e);
17   // 按位非,0变成1,1变成0
18   int f = ~a; // "11101000" = -24,
19   // 注意,Java中采用补码存储数字,对于整数,原码与补码一致,
20   // 对于负数,符号位不变,将原码取反然后加1,得到补码,补码"11101000"对应的原码是"10011000"即-24
21   System.out.println("(f = ~a) = " + f);
22   // 右移,左边空出位以符号位填充
23   int g = a >> 1;// "00001011" = 11
24   System.out.println("(g = a >> 1) = " + g);
25   // 右移,左边空出位以0填充
26   int h = a >>> 1;// "00001011" = 11
27   System.out.println("(h = a >>> 1)" + h);
28   // 对负数操作时,>>和>>>得到结果会不一样
29   System.out.println("(-24 >> 1) = " + (-24 >> 1) + "\t (-24 >>> 1) = " + (-24 >>> 1));
30   // 左移
31   int i = a << 1; // "00101110" = 46
32   System.out.println("(a << 1) = " + i);
33 
34   // 可以发现,右移1位相当于运算数除以2,左移1位相当于运算数乘以2,
35   // 实质上,右移n位,相当于运算数除以2的n次方,左移n位,相当于运算数乘以2的n次方,读者可以试验。
36   // 在进行乘除法操作时,开发者要有意识的利用这个特点,以提高运算速度。
37  }

 

posted @ 2012-07-30 19:24  blogs_lw  阅读(202)  评论(0编辑  收藏  举报