2017-01-20 23 views
0

предполагая, у меня есть функция, чтобы вручную вычислить десятичный из двоичного числа
* до четырех символов (двоичный)
* если вы можете ввести только 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 

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

+1

'$ длина = StrLen ($ BIN); for ($ i = 0; $ i <$ length; $ i ++) {$ offset = $ length - $ i - 1; $ values ​​= $ bin {$ offset}; // .... остальная часть вашего кода цикла здесь} ' –

+0

@MarkBaker Спасибо за ответ! ваш код мне очень помог! мой последний код: $ length = strlen ($ bin); $ dec = 0; //ver.1 for ($ i = 0; $ i <$ length; $ i ++) { $ offset = $ length - $ i - 1; $ values ​​= $ bin [$ offset]; $ ans = $ values ​​* pow (2, $ i); $ dec + = $ ans; } –

+0

@MarkBaker жаль, что мой ответ трудно читать, отступ и новая строка, похоже, не работают в комментарии. но вот мой ver.2 кода, если функция substr() поддерживается в проекте. $ length = strlen ($ bin); $ dec = 0; for ($ i = 1; $ i <= $ length; $ i ++) { $ values ​​= substr ($ bin, - $ i, 1); $ ans = $ values ​​* pow (2, $ i-1); $ dec + = $ ans; } , но я по-прежнему предпочитаю версию 1, поскольку она не сильно зависит от родных функций php, поэтому она будет более совместима с разными версиями. php, если функции не работают. –

ответ

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

Благодарим вас за ответ, извините, мой вопрос был недостаточно ясен, я хотел вычислить двоичный файл до десятичного, поэтому я не хотел использовать встроенную функцию php, такую ​​как bindec(). –

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

Благодарим вас за ответ, извините, мой вопрос не был достаточно ясным, я хотел вычислить двоичный файл до десятичного числа, поэтому я не хотел использовать собственную функцию php, такую ​​как bindec(). –

+0

@ha_ryu http: // stackoverflow.com/questions/36741587/how-to-convert-binary-to-decimal-without-use-php-native-функции – mwweb

+0

благодарим вас за ответ, но он по-прежнему использует собственные функции php, explode(); str_replace(); count(); chr(); :) –

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

Благодарим вас за ответ! Я пробовал ваш код, но кажется, что ваша функция bintodec() возвращает 0 все время. –