如何理解异或-记住异就够了

如何理解异或

什么是异或,就是是否不同

与 & 两个都为真结果为真

或 | 两个有一个为真结果为真

非 !真的结果为假,假的结果为真

异或 ^ 两个逻辑值不同结果为真,两个逻辑值相同结果为假,不要记异或,就记住异

package com.example.exam.array;

public class Test136 {
    public static void main(String[] args) {
        // 与
        System.out.println(true & true);
        // 或
        System.out.println(true | true);
        // 非
        System.out.println(!true);
        // 异或
        System.out.println(true ^ false);
        System.out.println(true ^ true);

    }
}

异或的性质

  1. N^0=N任何数与0异或结果为自己本身 N^N=0任何数和自己异或结果为0
  2. 异或满足交换律和结合律 A^B=B^AA异或B等于B异或A A^B^C=A^(B^C)A异或B异或C等于A异或B异或C的结果
  3. 一批数做异或,异或顺序不重要

因此有以下结论
条件:a和b指向两块不同的内存,尽量别用以下方法
两个数a和b交换,可以使用如下代码实现

a=a^b;
b=a^b;
a=a^b;

证明:
初始值:a=甲, b=乙
a=a^b =甲^乙, b=乙
b=a^b =甲乙=甲, a=甲^乙
a=a^b =甲甲=乙, b=甲

位运算

位运算是比算数运算快的多的运算!

取出一个数最右侧的一个1
a&(~a+1) a与(a取反+1)

例子

a        1010001010
~a       0101110101
~a+1     0101110110
a&(~a+1) 0000000010
posted @ 2022-01-26 20:29  Oh,mydream!  阅读(581)  评论(0编辑  收藏  举报