zoukankan      html  css  js  c++  java
  • x+y = ((x&y)<<1) + (x^y) 证明

    法一:
    我们考虑x,y在二进制表示时候,按位相加
    其中第i位
    xi+yi = ((xi&yi)<<1) + (xi^yi)
    其中(xi&yi)<<1表示当xi和yi都是1是,需要进位1.
         xi^yi表示不考虑进位,当前位的值.
    把所有这些数据相加,也就是
    x+y = Sum{xi*2^i}+Sum{yi*2^i} = Sum{(xi+yi)*2^i} 
         = Sum{ (((xi&yi)<<1)+(xi^yi))*2^i }
         =Sum{ ((xi&yi)*2)*2^i + (xi^yi)*2^i}
         =Sum{(xi&yi)*2^i}*2 + Sum{(xi^yi)*2^i}
         =(x&y)*2+(x^y)
         =((x&y)<<1)+(x^y)

    法二:

    x = (x&y) + ((x^y)&x)
    y = (x&y) + ((x^y)&y)
    ((x^y)&x) + ((x^y)&y) = x^y 
    ----------------------------------
    x + y = 2 * (x&y) + (x^y)

    应用:

    利用位运算实现两个整数的加法运算

    int Add(int a,int b)
    {
      if(b == 0) return a; 
      int sun,carry;
      sum = a^b; //完成第1步无进位加法
      caryy = (a&b)<<1; //完成第2步有进位的加法,并进位
      return Add(sum,carry); //进行递归相加
    }
  • 相关阅读:
    C#重载操作符的那点事
    Winform最小化托盘
    C#多线程传参
    GridView事件大全
    测试2
    测试
    FindFileByContent
    JavaScriptCallCSharp js调用C#属性与方法
    GroupBy
    查询指定属性的文件
  • 原文地址:https://www.cnblogs.com/zhanbiqiang/p/4009515.html
Copyright © 2011-2022 走看看