Преобразование десятичного числа в двоичное в PHP - PullRequest
0 голосов
/ 03 июля 2011

У меня есть эта функция, которая конвертирует числа из десятичного в двоичное.

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

Как мне этого добиться?

Ответы [ 3 ]

5 голосов
/ 03 июля 2011

$num = $num / 2;, вероятно, выполняет дробное деление (неявное преобразование в float ), в результате чего $num приближается к 0, но для этого требуется очень много времени. Сделайте $num = floor($num / 2);, чтобы округлить его обратно до целого числа .

Обратите внимание, что есть также decbin(), встроенный метод для достижения этой цели.


Примерный (но лишний):

function DecimalTOBinary($num)
{
    return decbin($num);
}
2 голосов
/ 03 июля 2011

Если вы хотите использовать эту функцию по практическим соображениям, делайте то, что говорит @Core Xii. Если вы хотите реализовать эту функцию для изучения, вы должны использовать функцию floor: $num = floor($num/2), потому что PHP думает, что $num - это число с плавающей точкой и не делит его на целое число.

Кроме того, вы захотите return strrev($b), потому что ваши цифры будут обратными.

0 голосов
/ 03 июля 2011

Эта функция будет делать то, что вы хотите:

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

Основные изменения:

  • Настил числа во время проверки цикла
  • Обратные цифры.
  • Удалены ненужные переменные.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...