gpt4 book ai didi

java - 如何在没有 + 的情况下添加数字

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:18 24 4
gpt4 key购买 nike

我在面试中被问到这个问题。我没有回答,实际上我不明白它是如何工作的。

int add(int x, int y)
{
while (y != 0)
{
int carry = x & y;
x = x ^ y;
y = carry << 1;
}
return x;
}

我不是在问为什么它会产生正确答案...首先,为什么算法最终会停止?对我来说,这不是那么明显。

为了让它停止,carry 必须变为 0。有人不能简单地解释一下吗?

最佳答案

line 1 : int carry = x & y;

line 2 : x = x ^ y;

line 3 : y = carry << 1;

如果 x = 1; y = 2;

每个数字的二进制:

0 = 00

1 = 01

2 = 10

3 = 11

对于第 1 行代码,

&(按位与)如果两个操作数中都存在二进制 AND 运算符,则将其复制到结果中

x 是 1 => 01

y 是 2 => 10

结果进位=>00(0)

对于第 2 行代码,

^(按位异或)如果二进制异或运算符在一个操作数而不是两个操作数中都设置了位,则复制该位。

x 是 1 => 01

y 是 2 => 10

结果 x => 11 (3)

对于第 3 行代码,变量进位需要左移一位,所以现在进位是 0 => 00 并且左移 1 位意味着进位现在是 0。结果 y 是 (0)。 while 循环停止,因为 y 现在是 0。

x 的最终结果是 3。

希望对您有所帮助。

关于java - 如何在没有 + 的情况下添加数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37451311/

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