• Java中的位运算符与使用技巧总结


    1.  (^  异或运算符

    运算规则:对两个操作数进行位的异或运算。相同取0,相反取1】。即两操作数相同时,互相抵消

    使用技巧:

    (1)交换数值。 int a = 10;int b = 20   ===> a^b^a == b, a^b^b == a 

    1  int f = 50;
    2  int g = 60;
    3 
    4 f = f^g;
    5 g = f^g;
    6  f = f^g;
    7 System.out.println(f+" "+g);
    8 
    9  输出结果是:60 50
    View Code

    (2)对称抵消的传递性。如:int a = 10, int b = 20, int c = 30, int d =40. ===> a^b^c^d^a == b^c^d ,  a^b^c^d^a^b == c^d, a^b^c^d^a^b^c^d = 0.

    其中可以用性质2来寻找一个成对的数组中个数为奇数的哪个值。

     1 public static void main(String[] args){
     2 
     3         int array[] = {2,3,4,4,3,5,5,6,6,7,7};
     4 
     5         int a = 0;
     6 
     7         for(int i=0;i<array.length;i++){
     8 
     9             v^=array[i];
    10 
    11         }    
    12 
    13         System.out.println("不相同的那个数是:"+v);
    14 
    15     }
    View Code

    2.(&)按位与运算符

    运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;   即:两位同时为“1”,结果才为“1”,否则为0】。另:负数按补码形式参加按位与运算。

    使用技巧:

    (1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

    1 public static void main(String[] args) {
    2         int a=50;
    3         int b=60;
    4         System.out.println(a&b&0);//输出 0;
    5     }
    View Code

    (2)取一个数中指定位

    方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。

    例:设X=10101110,

        取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;

        还可用来取X的2、4、6位。

     1  public static void main(String[] args) {
     2         int a = 50;
     3         byte aBit = (byte) a;//00110010
     4         byte lastTwo = (byte) 3;//00000011
     5         byte lastFive = (byte) 31;//00011111
     6         byte result2 = (byte)(aBit & lastTwo);
     7         byte result5 = (byte)(aBit & lastFive);
     8 
     9         System.out.println(Byte.toString(result2));//取50的后2位,---输出2
    10         System.out.println(Byte.toString(result5));//取50的后5位,---输出18
    11     }
    View Code

    3.( 按位或运算符

    运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;即 :参加运算的两个对象只要有一个为1,其值为1。另,负数按补码形式参加按位或运算。

    使用技巧:将一个数据的某些位置为1

    例如:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。

    例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

    4.( ~ )非运算符

    运算规则:非运算即取反运算,在二进制中1变0,0变1

    110101进行非运算后为001010即1010
    int X进行非运算后变为   -(X+1),即~5=-6,~(-5)=4

    5.(<<)左移运算符

    运算规则:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

    例:a = a << 2 将a的二进制位左移2位,右补0,

    左移1位后a = a * 2; 

    若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2

    6.(>>)右移运算符

    将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

    操作数每右移一位,相当于该数除以2

    例如:a = a >> 2 将a的二进制位右移2位,

    左补0 or 补1 得看被移数是正还是负。

    7.(>>>无符号右移运算符

    >>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。

    例如:var temp = -14 >>> 2

    变量 temp 的值为 -14 (即二进制的 11111111 11111111 11111111 11110010),向右移两位后等于 1073741820 (即二进制的00111111 11111111 11111111 11111100)。

  • 相关阅读:
    linux下python3环境安装(源码编译的方式安装)
    windows下docker安装(windows上安装docker比较鸡肋不推荐,还是建议在linux等系统上安装)
    序列化器嵌套的使用
    采用自定义模型字段代替序列化器嵌套的使用来返回我们想要的数据
    xadmin后台的安装及配置使用
    ORACLE检查找出损坏索引(Corrupt Indexes)的方法详解
    OGG相关操作
    ESXi挂载NFS共享存储
    第4步:创建RAC共享磁盘组
    Zabbix Server 配置微信报警
  • 原文地址:https://www.cnblogs.com/yuerugou54/p/12319286.html
Copyright © 2020-2023  润新知