Java工程师知识树

Java基础-源码分析-位运算的妙用

2021-01-01  本文已影响0人  HughJin

Java工程师知识树 / Java基础


注意:位运算只用于整数,并且如果超过范围所得值为0。比如8>>4,并不是0.5而是0

&:与,且

性质:两个数字的个位都是1时,结果是1,否则为0
用途:


^:异或;

性质:两个位相同为0,不同为1;x ^ x = 0 , x ^ 0 = x;遵循交换律、结合律
用途:

x ^= y; 
y ^= x; 
x ^= y; 

>>:右移

性质:右移运算符(>>)就是向右移动指定的位数,左边补上0.相当于乘以2

代码测试:

        System.out.println(5>>2);// 1       说明:与5/2/2结果相同
        System.out.println(5>>>2);// 1      说明:与5/2/2结果相同
        System.out.println(-5>>2);// -2     说明:符号位不右移
        System.out.println(-5>>>2);// 1073741822    说明:符号位会右移
        System.out.println(-5 >> 31);// -1      说明:符号位不右移
        System.out.println(-5 >>> 31);// 1      说明:符号位会右移
        System.out.println(-5 >> 32);// -5      说明:右移(>>) 32 位不进行操作
        System.out.println(-5 >> 34);// -2      说明:右移(>>) 34 位相当于右移(>>)2位 与5/2/2结果相同

位运算符综合运用

  1. 求平均值,比如有两个int类型变量x、y,首先要求x+y的和,再除以2,但是有可能x+y的结果会超过int的最大表示范围,所以位运算就派上用场啦。
    (x&y)+((x^y)>>1);

  2. 求绝对值

  int abs( int x ) 
   { 
     int y ; 
     y = x >> 31 ; 
    return (x^y)-y ;        //or: (x+y)^y 
   }
  1. 取模运算,采用位运算实现:
    a % (2^n)等价于 a & (2^n - 1)
上一篇下一篇

猜你喜欢

热点阅读