PHP 中没有 * 和 / 的乘法

Multiplacation in PHP without * and /

提问人:GalacticLux 提问时间:4/4/2023 更新时间:4/5/2023 访问量:30

问:

所以我正在尝试在不使用除法或减法的情况下制作一个乘法应用程序。为此,我使用埃塞俄比亚乘法,它使用 << 和 >>。由于某种原因,代码不会将 Num2 向右移动。

我真的不知道如何修复它,但如果有人可以提供帮助,这里是代码。

<?php 


function ethMul($num1, $num2){
    $count = 0;
    while($num2 > 1){
        #number stuff
        $num1 << 1;
        $num2 >> 1;
        #drops decimal
        $num2 = (int) $num2;
        echo $num2;
        #uses EM to take num5 and make it equal to $num3>>1 and then make num6 equal to $num5<<1;
        $num3 = $num1 >> 1;
        $num4 = $num3 << 1;
        #if statement for adding to the
        if ($num4 = $num1){
            $count += $num1;
        }
    }
    return $count;
}


echo ethMul(17, 12);


PHP 数学

评论

0赞 mickmackusa 4/4/2023
这天生就是埃塞俄比亚人吗?或者我们应该简单地称其为“位数学”或“通过位移位进行数学”?
0赞 Sammitch 4/4/2023
$num2 >> 1不修改 。将结果分配回 。另外,位移操作的结果已经是一个整数,你不需要强制转换它。$num2$num2
1赞 Sammitch 4/4/2023
@mickmackusa似乎更广为人知的是“俄罗斯农民乘法”。

答:

0赞 jspit 4/5/2023 #1

这是将两个正整数相乘的简单副本。$fac 2 >>= 1;是 $fac 2 = $fac 2 >> 1 的简化表示法;

function mul($fac1,$fac2){
  for($prod = 0;$fac2;$fac2 >>=  1){
    if($fac2 & 1) $prod += $fac1;
    $fac1 <<= 1;
  }
  return $prod;
}

echo mul(7,6);  //42