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

不使用四则运算符计算两个整数的和

时间:2014-06-30 23:50:59      阅读:428      评论:0      收藏:0      [点我收藏+]

标签:style   color   使用   strong   代码   amp   

这里笔者只写出关键代码:

int add(int n,intm)

{
   if(m==0) returnn;      ①

   int sum=n^m;           ②

   int carry=(n&m)<<1;    ③

   return add(sum,carry); ④
}

在分析每步代码之前先看两个例子:
不带进位的两数相加:
0000 0010------2
0000 0100------4
结果是:
0000 0110------6
带进位的两数相加:
0000 0101------5
0000 0100------4
结果是:
00001001------9
先将这两个例子代入函数中,通过对比进位操作和不进位操作的不同,来了解此函数的执行过程。

定义一个add函数,并声明所需的两个整型变量:
①当m,n中有一个为0,则结果返回的是另一个数值。此语句是程序的最终出口。

② n与m做异或运算,如果m与n相加没有进位,sum就是所求的结果。否则保存没有存在进位的数值,继续执行下面的进位操作。

③ m与n做相与运算,然后左移1位。产生进位时,m与n在某一个相同位置上同时为1,相与之后依然为1,左移1位,便可得到进位数值。二次以上的进位以此类推。如果没有进位,则carry为0。

④ 递归函数return add( ),将上述步骤得到的sum和carry进行再次类似的运算,直至没有产生进位为止,即carry=0。

注:若分析有误望大家指出!

不使用四则运算符计算两个整数的和,布布扣,bubuko.com

不使用四则运算符计算两个整数的和

标签:style   color   使用   strong   代码   amp   

原文地址:http://www.cnblogs.com/gxchexi/p/3815944.html

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