您的位置:首页 > 其它

不使用加号的加法运算

2012-10-10 17:20 106 查看
//加法
int add (int a, int b)
{
//*递推
int c = 1;
for (; c ^ 0; )	//循环条件为:0 != c
{
c = a & b;
a = a ^ b;
b = c<<1;
}
return a;
//*/
/*递归
int c = a & b;
int d = a ^ b;
if (c ^ 0)	//若0 != c
{
return add(c<<1, d);
}
return d;
//*/
}


&:位与运算符

|:位或运算符

^:位异或运算符(相同为假,即0;相异为真,即1)

~:位非运算符(按位取反,1变0,0变1)

>>:位右移

<<:位左移

a ^ b:表示a + b,但是没有进位;若进位的值为0,则a + b = a ^ b;

(a & b)<<1:得到进位的值

a + b = (a ^ b) + ((a & b)<<1):a + b的值等于a ^ b的值假上进位的值;用递归或者递推来实现该加法运算,退出条件为进位的值等于0.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐