【问题标题】:Adding two numbers without + operator (Clarification)在没有 + 运算符的情况下添加两个数字(澄清)
【发布时间】:2012-01-30 21:22:09
【问题描述】:

我知道我们可以使用二进制加法器的逻辑,其中Sum = a XOR bCarry = a AND b

我也有解决办法:

int add(int a, int b)
{
     if(b == 0)
         return sum;
     sum = a ^ b;
     carry = (a & b) << 1;
     return add(sum,carry);
}

我在这里不明白的是为什么在每次递归期间进位移位或乘以 2?

【问题讨论】:

标签: bit-manipulation


【解决方案1】:

我觉得这有点难以解释,但这里有一个尝试;一点一点的想加法,只有4种情况;

0+0=0 
0+1=1 
1+0=1 
1+1=0 (and generates carry)

这两行处理不同的情况

sum = a ^ b

处理大小写 0+1 和 1+0,sum 将包含简单大小写,所有位位置加起来为 1。

carry = (a & b) << 1

(a & b) 部分查找大小写为 1+1 的所有位位置。由于加法结果为 0,因此进位很重要,它被移到左边的下一个位置 (

算法重复直到没有进位,在这种情况下 sum 将包含正确的结果。

顺便说一句,return sum 应该是return a,那么sumcarry 都可以是常规的局部变量。

【讨论】:

    【解决方案2】:
    public class AddSub {
    
        int sum=0,carry=0;
        public static void main(String[] args) {
            System.out.println("Add "+new AddSub().addition(93,5));
            System.out.println("Sub "+new AddSub().subtraction(7,60));
            System.out.println("Sub "+new AddSub().multiplication(9,60));
        }
    
        public int addition(int a, int b)
        {
            if(b==0)
            {
                return a;
            }
            else
            {
                 sum = a^b;
                 carry = (a&b)<<1;
                return addition(sum,carry);         
            }
        }
    
        public int subtraction(int a, int b){
    
            return addition(a,addition(~b,1));
    
        }
    
        public int multiplication(int a, int b){       
            for(int i=0;i<b/2;i++)
                sum = addition(sum,addition(a,a));
            return sum;     
        }
    }
    

    【讨论】:

      【解决方案3】:

      您好,不要认为自己太难了。 这是执行此操作的简单方法。

      Consider a=5, b=10;
      c=a-(-b);
      c=15;
      

      就是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-06
        • 2017-07-28
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多