gpt4 book ai didi

java - 在不使用 + 的情况下添加两个数字背后的实现逻辑?

转载 作者:搜寻专家 更新时间:2023-11-01 02:42:59 24 4
gpt4 key购买 nike

我在网上找到了这段代码。但是,我无法理解以下代码背后的逻辑:

public static int add(int a, int b) {
if (b == 0) return a;
int sum = a ^ b; // add without carrying
System.out.println("sum is : "+sum);
int carry = (a & b) << 1; // carry, but don’t add
return add(sum, carry); // recurse
}

最佳答案

让我们看一个示例(为简单起见,使用 8 位)

  a = 10010110
b = 00111101

a^b是 xor,它给出 1对于有 1 的地方在一个数字和0在另一个。在我们的示例中:

a^b = 10101011

0 + 0 = 0 , 0 + 1 = 11 + 0 = 1 ,唯一需要处理的列是具有 1 的列在这两个数字中。在我们的示例中,a^b无论对

的回答是什么
      00010100
+ 00010100

是。在二进制中,1 + 1 = 10 , 所以上面总和的答案是

      00101000

(a & b) << 1 .因此 a^b 的总和和 (a & b) << 1a + b相同.

因此,假设进程一定会终止,那么答案就是正确的。但是这个过程会终止,因为每次我们调用 sum递归地第二个参数至少有一个 0最后,由于位移 << .因此,我们保证最终会得到完全由 0 组成的第二个参数。 s,所以行 if (b == 0) return a;可以结束进程并给我们一个答案。

关于java - 在不使用 + 的情况下添加两个数字背后的实现逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29724198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com