PHP十进制到二进制的转换,而不decbin()(PHP decimal to binary con

2019-10-30 11:55发布

我试图让十进制到二进制转换器不使用decbin()函数。 我想这样的不便(这是确定,但它需要被逆转):

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

我怎么能扭转输出到1100101? 感谢在前进。 :)

Answer 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
?>

输出:A,接着为65个零1:

100000000000000000000000000000000000000000000000000000000000000000



Answer 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;


Answer 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);


文章来源: PHP decimal to binary conversion without decbin()