【问题标题】:PHP decimal to binary conversion without decbin()PHP十进制到二进制转换没有decbin()
【发布时间】:2014-09-20 23:13:20
【问题描述】:

我正在尝试在不使用 decbin() 函数的情况下将十进制转换为二进制。我这样尝试过(没关系,但需要颠倒):

    $dec=101;
    while ($dec>=1){
    $bin = $dec % 2;
    $dec = round($dec/2, 0, PHP_ROUND_HALF_DOWN);
    print "$bin";
    }// output:1010011

如何将输出反转为 1100101? 谢谢转发。 :)

【问题讨论】:

  • 看看strrev
  • 试过了,但没用(或者我没有正确使用它)。我尝试过这样的事情:$binary= binary(); print strrev("$binary"); function binary(){ $dec=101; while ($dec>=1){ $bin = $dec % 2; $dec = round($dec/2, 0, PHP_ROUND_HALF_DOWN); print "$bin"; } }

标签: php binary decimal


【解决方案1】:

要将十进制整数转换为二进制,重复将其除以 2 — 使用整数除法 — 直到它变为 0。每一步的余数,即 0 和 1,表示二进制数,当以相反的顺序串在一起时它们是在其中生成的。

    <?php
function dec2bin_i($decimal_i)
{
 bcscale(0);

 $binary_i = '';
 do
  {
   $binary_i = bcmod($decimal_i,'2') . $binary_i;
   $decimal_i = bcdiv($decimal_i,'2');
  } while (bccomp($decimal_i,'0'));

 return($binary_i);
}
?>

测试用例

<?php
echo dec2bin_i('36893488147419103232'); //2^65
?>

输出:1 后跟 65 个零:

1000000000000000000000000000000000000000000000000000000000000000000

【讨论】:

  • 这帮助我通过了 big int 的 32 位系统限制!太棒了!
  • 这是最好的答案,也适用于大量数字。
【解决方案2】:

有一个函数可以反转字符串strrev

$dec=101;
$binStr = '';
while ($dec>=1){
    $bin = $dec % 2;
    $dec = round($dec/2, 0, PHP_ROUND_HALF_DOWN);
    $binStr .= $bin;
}
$binStr = strrev($binStr);
echo $binStr;

【讨论】:

    【解决方案3】:

    试试这个:

         $dec = 101;
         $bos = NULL;
         while ($dec>=1){ $bin = $dec % 2; $dec = round($dec/2, 0, 
         PHP_ROUND_HALF_DOWN); 
        $bos .= $bin;
         }
        echo strrev($bos);
    

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 2021-01-17
      • 2018-03-11
      • 2016-02-09
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多