2011-07-03 10 views
0

この関数は、数値を10進数から2進数に変換します。PHPで10進数をバイナリに変換する

<?php 
function DecimalTOBinary($num) 
{ 
    $a = ""; 
    $b = ""; 
    $x = 0; 
    while ($num !=0) 
    { 
     $b .= $num % 2; 
     $num = $num /2; 
    } 
    /* 
    for($i = strlen($b) -1;$i >=0;$i--) 
    { 
     a .= substr($b,$i,$i +1); 
    }*/ 
    return $b; 

} 
?> 

私の問題は、それが文字列を返すことです。

010010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

私は戻りたい:

0100101 

どのように私はこれを達成することができますか?

答えて

5

$num = $num/2;はおそらく、分数分周(暗黙的フロートへの変換)、0に近づく$numの原因となるが、そこに非常に長い時間を割いを行います。 $num = floor($num/2);にして、の整数に丸めます。

これを実現するための組み込みメソッドdecbin()もあります。


典型的な(しかし、余分):

function DecimalTOBinary($num) 
{ 
    return decbin($num); 
} 
2

あなたが実際的な理由のためにその機能が必要な場合、@Core XIIが言うん。その関数を学習するために実装したい場合は、$numは浮動小数点であり、整数としては分割しないと考えるので、関数:$num = floor($num/2)を使うべきです。

また、数字が逆になるため、return strrev($b)になります。

0

この機能は、あなたがやりたいことになります。

<?php 
function DecimalToBinary($num) { 
    $i = ""; 
    while (floor($num) > 0) { 
     $i .= $num % 2; 
     $num /= 2; 
    } 
    return strrev($i); 
} 

主な変更点は以下のとおりです。

  • ループチェックしばらく
  • 逆転桁の数字をフローリング。
  • 不要な変数が削除されました。
関連する問題