zoukankan      html  css  js  c++  java
  • 异或 ^ 运算

    异或:不相同

    相同则0,不同则1

    1^0=?

    我们先从字面意思去理解上面这个句子。

    1异或0的值为多少?

    1不与0相同?  

    当然不相同==》不同则1 所以结果是1

    0^0=?

    我们先从字面意思去理解上面这个句子。

    0异或0的值为多少?

    0不与0相同?  

    当然相同==》相同则0 所以结果是0

    在数学上异或运算有其自身所包含的一些特性:

    1、交换律

      证明:A^B = B^A :  请从字面意义去理解   A不同于B,B不同于A  都表示同一个意思

    2、结合律(即(a^b)^c == a^(b^c))

    3、对于任何数x,都有x^x=0,x^0=x

    4、对于任何数A,都有A^1=x非

    5、自反性 A ^ B ^ B = A ^  0 = A   

        证明: A ^ B ^ B = A ^ (B ^ B) = A ^ 0 = A

        应用:用于不加入第三个参数交换2个元素

     static void Main(string[] args)
            {
                int x = 3;
                int y = 4;
     
                Console.WriteLine("x={0},y={1}", x, y);//x=3,y=4
     
                x = x ^ y;
                y = y ^ x;
                x = x ^ y;
     
                Console.WriteLine("x={0},y={1}", x, y);//x=4,y=3
     
                Console.WriteLine(1 ^ 0); //1
                Console.WriteLine(0 ^ 0); //0
                Console.WriteLine(1 ^ 1); //0
                Console.WriteLine(0 ^ 1); //1
     
                Console.ReadKey();
            }
    
    /*
    明白原理了吗?就是利用异或操作,从最后1,0异或操作的结算来看,异或操作有二个基本特性:
    
    1、满足交换律(即1^0 和 0^1结果相同)
    
    2、相同为0,相异为1(即不同为1)
    
    所以来仔细看下:
    
    x = x ^ y
    
    y = y ^ x 相当于 y = y ^ (x ^ y) = x ^ y ^ y (交换律) = x ^ 0 (y跟y相同,异或结果为0) = x (x跟0异或的结果,内部二进制中的每一位都不变,最终还是x)
    
    这样最终y的值就变成了x
    
    再继续
    
    x = x ^ y 相当于 x = (x ^ y) ^ (y ^ (x ^ y))-即把上面的公式继续替换过来 = x ^ x ^ y ^ y ^ y (交换律) =0^ y ^ 0 (最前面的x ^ x 为0,最后的 y ^ y也为0) = y
    
    这样最终x的值就变成了y
    
    http://www.cnblogs.com/yjmyzz/archive/2010/11/23/1885901.html
    */
  • 相关阅读:
    Pycharm 调试system-config-users
    只写了两行代码,为什么要花两天时间?
    为开源做贡献的6个技巧
    2020年10月编程语言排行榜
    全球最厉害的 14 位程序员
    6_38_二叉树的后序遍历非递归算法(和先序有些许不一样)
    6_37_二叉树的先序遍历非递归算法
    6_36_相似二叉树
    6_33_两个一维数组判断u是否为v的子孙
    6_34_扩展判断u是否为v的子孙
  • 原文地址:https://www.cnblogs.com/pavkoo/p/3554631.html
Copyright © 2011-2022 走看看