您的位置:首页 > 其它

不用任何的算数运算符实现加法

2017-01-18 17:00 253 查看

不使用任何算数运算符实现加法

     这里的算数运算符表示的是

算术运算符 含义(示例)

+(加号) 加法运算 (3+3)

–(减号) 减法运算 (3–1) 负 (–1)

*(星号) 乘法运算 (3*3)

/(正斜线) 除法运算 (3/3)

%(百分号) 求余运算10%3=1 (10/3=3·······1)

^(乘方) 乘幂运算 (3^2)

! (阶乘) 连续乘法 (3!=3*2*1=6)

|X| x为任何数 (绝对值) 求正 (|1|)

我们不使用算数运算符的情况下实现加法,还是有其他的一些算法的,比如位运算,那我们就看一下位运算的算法,我们收先考虑或可以吗?

我们知道或就是不一样的就是1,那么有一个问题了对于位运算而言我们只有零和一,对于没有进位的情况我们的或完美的算出了结果,但是对于有进位的情况怎么办呢?有同学要说了,我们有与呀!这里可以通过与获得那些有进位的数字位,但是,我们那些进位之后的原位数是零还是一就不确定了。因为我们不知道前面的以为是否有进位,所以我们需要做一个而且我们必须将原来有进位的首先置零才行。所以我们使用这里的异或,这样就只留下了不进位的数字位,然后我们通过与算出有进位的数字位,然后进位的数字向左移动一位,接下来,从新计算就好了!

public int addAB(int A, int B) {
if (0 == B) {
return A;
}
int sum = A ^ B;
int carry = (A & B) << 1;
if (0 == carry) {
return sum;
}
return addAB(sum, carry);
}


这里呢!我们第一步传入  如果 B 是0我们就直接返回A,同样也是在没有进位的时候返回A!下面的 0 == carry表示我们第一次进入就没有进位可以避免二次递归。这样我们就算完了。小猿写的欢迎斧正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: