使用乘法实现加法

时间:2016-09-14 08:41:12

标签: algorithm math multiplication addition exponentiation

我已经熟悉使用加法或使用乘法求幂来实现乘法的着名问题,使用循环或位移算法以及添加移位位组的组合。

现在,我想知道是否有任何方法只使用更高级别的操作来实现加法,例如具体的乘法,或取幂,对数等(减去减法)

这可以通过组合这些操作的某种算法(以及可能的按位运算符作为助手)来实现,或者是添加作为公理的基本操作,因此除了定义之外不能以其他方式再现吗?

感谢。

2 个答案:

答案 0 :(得分:7)

当然可以:

a + b = ln(exp(a) * exp(b))

编辑:提升我的眼睛,超越上面的实用性,更加投机,我会说你应该期望能够通过更高级别执行更低级别的操作。只要较高级别的操作是由较低级别的操作构建的,这些操作至少应该能够执行其建筑石材的操作。但是,可能不是一种简单直接的方式,请参阅下面的评论。一个人可以告诉你1 + 1 = 2但是要求计算机或更简单的设备会更便宜和更安全。

答案 1 :(得分:2)

好吧,如果你想对它迂腐,可以只使用按位运算符OR,XOR和AND加上二进制表示中的两个数字,而不是严格地"添加"任何东西。对于和a + b = c,第n位可以这样计算:

  

c n = a n XOR b n XOR进位
  carry =(a n AND b n )OR((a n XOR b n )AND carry)< / p>

当然,你应该避免在迭代这些位时使用n ++,然后进行几次乘法以获得良好的度量:

int add(int a, int b) {
    int c = 0;
    char carry = 0;
    for (int mask = 1; mask; mask *= 2) {
        char an = a & mask ? 1 : 0;
        char bn = b & mask ? 1 : 0;
        c |= (an ^ bn ^ carry) * mask;
        carry = an & bn | (an ^ bn) & carry;
    }
    return c;
}