码迷,mamicode.com
首页 > 其他好文 > 详细

x+y = ((x&y)<<1) + (x^y) 证明

时间:2014-10-07 20:24:13      阅读:522      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   strong   数据   sp   div   c   

法一:
我们考虑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); //进行递归相加
}

 

x+y = ((x&y)<<1) + (x^y) 证明

标签:style   blog   color   ar   strong   数据   sp   div   c   

原文地址:http://www.cnblogs.com/zhanbiqiang/p/4009515.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!