不使用+运算符

时间:2011-02-22 22:29:07

标签: java

有人可以解释这个功能是如何工作的吗?

public int TestAdd(int a,int b) {

        if(a <1)return b;       
        return(TestAdd((a&b)<<1,a^b));      
    }

3 个答案:

答案 0 :(得分:6)

添加两个匹配的设置二进制数字相当于设置下一位:1 + 1 = 2,依此类推。因此,该函数对所有匹配位执行此操作,然后将不匹配的位传递到另一轮。如果没有不匹配的,那就完成了。

答案 1 :(得分:1)

因为您可以明显地测试它确实添加了两个数字,我假设您不理解这些符号正在做什么。 Java的运算符在这里描述:

http://download.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

您可以轻松查找“逻辑AND”和“按位异或”的定义以及它们如何应用于整数。

答案 2 :(得分:0)

这里我们使用递归的概念,这个函数将自身称为值 -  二进制的1位左移(由于加法时进位)加上数字和数字的xor直到a变为&lt; 1。 因此它返回数字的添加。 您可以通过采用一些值来调试函数,以便更好地理解。