gpt4 book ai didi

bit-manipulation - 求一个数的平方

转载 作者:行者123 更新时间:2023-12-04 18:39:53 24 4
gpt4 key购买 nike

我发现了这个问题,

编写一个不使用乘法返回给定整数 n 的平方的函数。

对此的解决方法是

public static int sq(int n){
int i = n;
int sq = 0;
int count = 0;

while(i > 0){
if((i & 1) == 1){
sq += n << count;
}

i = i >> 1;
count++;
}

return sq;
}

我了解该功能在做什么,但我不明白为什么会这样。

谁能解释为什么这是一个有效的解决方案?

最佳答案

因为乘法分布于加法。这可能听起来很神秘,但这确实是原因。考虑这个乘法:

100 * 111

显然只有 111 左移了两个:11100

此代码对 i 中为 1 的每个位都执行此操作,并总结结果。所以它变成了例如 111 * 111进入
001 * 111 = 00111
010 * 111 = 01110
100 * 111 = 11100
----- +
110001

允许以这种方式拆分乘法,因为乘法分布于加法之上,这就是 001 * 111 + 010 * 111 + 100 * 111等于 (001 + 010 + 100) * 111 ,现在显然等于 111 * 111 .

关于bit-manipulation - 求一个数的平方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578618/

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