手动计算二进制到十进制

时间:2017-01-20 10:09:17

标签: php binary decimal

假设我有一个从二进制数字手动计算十进制的函数 *最多四个字符(二进制)
*假设您只能输入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(),你会如何手动将二进制转换为十进制?

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

答案 2 :(得分: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");
?>

答案 3 :(得分:0)

只需要为一个学生解决这个问题。

  1. 将字符串表示形式拆分为数字
  2. 反转数字
  3. 开始我们的结果
  4. 遍历所有数字,如果数字为1,则索引的幂加2

利用二进制数字中的每个数字将数字索引的功效加2的事实。

二进制数11等于2 ^ 0 + 2 ^ 1 = 3

function binaryToDecimal($str) {
    $digits = str_split($str);
    $reversed = array_reverse($digits);
    $res = 0;

    for($x=0; $x < count($reversed); $x++) {
        if($reversed[$x] == 1) {
            $res += pow(2, $x);
        }
    }

    return $res;
}