вычислить двоичное в десятичное вручную

при условии, что у меня есть функция для ручного вычисления десятичного числа из двоичного числа
* до четырех символов (двоичный)
* при условии, что вы можете ввести только 0 и 1 символ

код ниже работает отлично

function bin_to_dec($bin) {
$bin = str_split($bin);
$bin = array_reverse($bin);

$i = 0;
$dec = 0;
foreach($bin as $values) {
$ans = $values * pow(2, $i);
$dec += $ans;
$i++;
}

return $dec;

}

$bin = 1010 //4
$bin = 1 //1
$bin = 0 //0

предполагая, что если вы не можете использовать функции strrev (), str_split (), array_reverse (), как бы вы конвертировали двоичные числа в десятичные вручную?

0

Решение

Ну, вы пробовали встроенный BinDec функция?

var_dump(bindec(1010)); // int(10)
var_dump(bindec(1)); // int(1)
var_dump(bindec(101010)); // int(45)

Остерегайтесь, однако, эта функция предназначена для использования со строками и может давать странные результаты для целых чисел, начинающихся с 0 :

var_dump(bindec(0101)); // int(0)
var_dump(bindec("0101")); // int(5)
0

Другие решения

http://php.net/manual/en/function.bindec.php

Example bindec() example

<?php
echo bindec('110011') . "\n";
echo bindec('000110011') . "\n";

echo bindec('111');
?>
The above example will output:

51
51
7
0

Попробуйте bindec() функция.

$ret_val = bindec("10001101");

это один простой способ, в противном случае вы можете использовать …

    <?php
function strev($y)
{
for ($x = strlen($y)-1; $x>=0; $x--) {
$y .= $y[$x];
$y[$x] = NULL;
}
return $y;
}
function bintodec($str){
$dec=0;
$nstr=$str;
$nstr=strev($nstr);
for($i=0;$i<strlen($str);$i++){
$val = ($nstr%pow(10,strlen($nstr)-1)) * pow(2, $i);
$dec += $val;
$nstr=floor($nstr/10);
}
return $dec;
}
echo bintodec("1111010");
?>
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector