假设我有一个从二进制数字手动计算十进制的函数
*最多四个字符(二进制)
*假设您只能输入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 :(得分: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)
只需要为一个学生解决这个问题。
利用二进制数字中的每个数字将数字索引的功效加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;
}