gpt4 book ai didi

c++ - 需要澄清这个执行乘法的循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:01 25 4
gpt4 key购买 nike

int x, y; // x is a non-negative integer 
p = 0;
while (x > 0)
{
if ( x % 2 == 1 )
p = p + y;
y = y*2;
x = x/2;
}
// p == a*b here

我知道这个循环使用代数找到“a”和“b”的乘积:

a * b = (1/2)a * 2b

但是我看不懂代码:

if ( x % 2 == 1 )
p = p + y;

我希望有人能解释为什么“p”在 x 的奇数值上被分配为“p + y”。

最佳答案

while (x > 0) {
if (x % 2 == 1)
p = p + y;
y = y*2;
x = x/2;
}

假设 x = 4,y = 5

迭代:

  1. x 是偶数,y = 10,x = 2(即 x 可以分开,y应该加倍)
  2. x 是偶数,y = 20, x = 1
  3. x 是奇数,p = 20,y = 40,x = 0(即 x不能再分了,y应该加到p)
  4. x > 0false,循环结束

p = 4 * y

现在假设 x 一开始是奇数,假设 x = 5,y = 2:

  1. x 是奇数,p = 2,y = 4,x = 2
    (5/2 = 2.5,x 的新值将向下舍入,y 应在加倍之前添加/强>)
  2. x 是偶数,y = 8, x = 1
  3. x 是奇数,p = 10,y = 16,x = 0

p = y + 4*y

第一个 y 是原因,在它加倍之前将它添加到结果 (1 * y) 在这种情况下相当于 0.5 * ( 2 * y)

关于c++ - 需要澄清这个执行乘法的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19079272/

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