美文网首页
与&和或|和异或^的巧妙应用

与&和或|和异或^的巧妙应用

作者: chanyi | 来源:发表于2020-09-16 14:12 被阅读0次

&:与,要求都是1才为1,其他都为0
|:或,要求有一个为1即可1,全是0为0
^:异或,要求相同为0,不同为1

1、&的使用

1、计算一个数n转为二进制后,1的个数
可以循环进行n&(n-1),直到n=0

            int count=0;
            while (n!=0){
                count++;
                n=n&(n-1);
            }

2、判断一个数n的奇偶性
计算n&1,等于0是偶数,1是奇数

System.out.println("5&1="+(5&1));

3、利用每一位表示不同含义
比如在实际的业务场景中有多种情况,并且多种情况可以组合的,则可以将每一种种情况用整数的每一位表示。例如用户的权限有A、B、C三种。并且三种权限可以组合,如用户zhangsan可以有AC权限,lisi可以有ABC权限。这样的情况下,只需要用整数7即可完全表示所有可能的组合,第一位表示A,第二位表示B,第三位表示C,则A对应的是1,B对应的是2,C对应的是4,ABC则对应的是7。
这样的方式可以节省存储空间,计算也高效。
判断时候拥有某权限,只需要&对应的数字,比如6&4=4,则可以得知6拥有C权限。

2、|的使用

|运算表示如果有一个位为1,则为1.
1、如果有负数参与判断,则可以使用|简化
例如:

if(x<1||y<1){
      System.out.println("有负数");
    }

可以简化改写为:

if( (x|y) <0){
      System.out.println("有负数");
    }

3、^的使用

1、快速判断两个整数是否相等
主要思想是,两个整数相同,则二进制相同,做异或运算得结果为0
优点是快!因为是位运算。
具体代码

System.out.println(4^4);//输出0

2、两个数交换
主要思想是a^b^a =b,a^b^b=a
这样的方式优点是,不需要借助临时变量
具体代码

    int a = 9;
    int b = 7;
    a=a^b;
    b=a^b;
    a=a^b;
    System.out.println(a+"-"+b);//7-9

3、寻找数组中只出现一次的数,其他数出现两次
代码:

public int singleNumber(int[] nums) {
        int num = nums[0];
        for (int i=1 ;i<nums.length;i++){
            num  = num^nums[i];
        }
        return num;
    }

4、将某个整数的指定位反转
利用01=1,11=0的规律,将指定位对应异或1即可。例如将9(1001)的第二位反转。则只需要将(1001^0010)即可;
具体代码

System.out.println(9^2);//输出11,即(1011)

相关文章

  • 与&和或|和异或^的巧妙应用

    &:与,要求都是1才为1,其他都为0|:或,要求有一个为1即可1,全是0为0^:异或,要求相同为0,不同为1 1、...

  • 数字逻辑第二章

    与或非运算 与: 或: 非: 与非: 或非 与或非 异或 同或:(异或非) 逻辑代数公理和定律 重要规则 逻辑函数...

  • 与,或,异或

    总记不住与:& 只有对应的两个二进位均为1时,结果位才为1 ,否则为0。9&5 = 00001001 & 0000...

  • 常见python算法小题和一些常考知识点

    1、如何不使用^实现异或异或^与或| 相差在当x和y都为1的时候,或为1 异或为0 因此可以与&上x和y取反...

  • 与、或、异或运算

    与、或、异或运算 1.与运算(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0;0&1=...

  • 字典树_异或和

    2018-03-16异或的性质 a ⊕ a = 0 a ⊕ b = b ⊕ a a ⊕b ⊕ c = a ⊕ (b...

  • python异或高阶应用-前缀异或法

    前言 我们在算法中经常会看到前缀和的解法,能够有效地降低算法复杂度。有一个和前缀和非常类似的算法,前缀异或法。 简...

  • 异或( ^= ) 巧妙完成开关灯

    如果现在要写一个控制器,对同一个按钮进行操作,点击一次是开灯,再点击一次是开灯,以此类推。 非常简单,创建一个成员...

  • 位运算(位掩码BitMask)的简单应用场景浅析

    在Java中,位运算符有:与(&)、非(~)、或(|)、异或(^)、移位(<< 和 >>)、无符移位(<<< 和 ...

  • 2018-04-24 Java位运算符

    位[运算符] (4种) 与(&)、非(~)、或(|)、异或(^)与 & 或 | 非~ 异或 ^

网友评论

      本文标题:与&和或|和异或^的巧妙应用

      本文链接:https://www.haomeiwen.com/subject/clcpdktx.html