(PHP 4, PHP 5)
bindec — Binario a decimal
Devuelve el equivalente decimal de la representación binaria del número del argumento binary_string.
bindec() convierte un número binario a un integer o, si es necesario por razones de tamaño, float.
bindec() interpreta todos los valores de binary_string como enteros sin signo. Esto es debido a que bindec() considera al bit más significativo como otro orden de magnitud en lugar de como un bit del signo.
La cadena binaria a convertir
Este parámetro debe ser una cadena. Cualquier otro tipo de dato empleado puede producir resultados inesperados.
El valor decimal de binary_string
Versión | Descripción |
---|---|
Desde 4.1.0 | Esta función puede ahora convertir números del tipo integer que eran muy grandes para encajar en dicho tipo, siendo en dicho caso devueltos los valores grandes como float. |
Example #1 Ejemplo de bindec()
<?php
echo bindec('110011') . "\n";
echo bindec('000110011') . "\n";
echo bindec('111');
?>
El resultado del ejemplo sería:
51 51 7
Example #2 bindec() interpreta las entradas como enteros sin signo
<?php
/*
* La lección de este ejemplo es el resultado
* más que el código en si mismo.
*/
$magnitude_lower = pow(2, (PHP_INT_SIZE * 8) - 2);
p($magnitude_lower - 1);
p($magnitude_lower, 'Observa el cambio? Míralo la próxima vez...');
p(PHP_INT_MAX, 'PHP_INT_MAX');
p(~PHP_INT_MAX, 'interpretado para ser uno más que PHP_INT_MAX');
if (PHP_INT_SIZE == 4) {
$note = 'interpretado para ser el mayor entero sin signo';
} else {
$note = 'interpretado para ser el mayor entero sin signo
(18446744073709551615) aunque sesgada por la precisión del float';
}
p(-1, $note);
function p($input, $note = '') {
echo "input: $input\n";
$format = '%0' . (PHP_INT_SIZE * 8) . 'b';
$bin = sprintf($format, $input);
echo "binary: $bin\n";
ini_set('precision', 20); // Para ser leido en bloques 64 bit.
$dec = bindec($bin);
echo 'bindec(): ' . $dec . "\n";
if ($note) {
echo "NOTA: $note\n";
}
echo "\n";
}
?>
El resultado del ejemplo en equipos de 32 bits sería:
input: 1073741823 binary: 00111111111111111111111111111111 bindec(): 1073741823 input: 1073741824 binary: 01000000000000000000000000000000 bindec(): 1073741824 NOTA: Observa el cambio? Míralo la próxima vez... input: 2147483647 binary: 01111111111111111111111111111111 bindec(): 2147483647 NOTA: PHP_INT_MAX input: -2147483648 binary: 10000000000000000000000000000000 bindec(): 2147483648 NOTA: interpretado para ser uno más que PHP_INT_MAX input: -1 binary: 11111111111111111111111111111111 bindec(): 4294967295 NOTA: interpretado para ser el mayor entero sin signo
El resultado del ejemplo en equipos de 64 bits sería:
input: 4611686018427387903 binary: 0011111111111111111111111111111111111111111111111111111111111111 bindec(): 4611686018427387903 input: 4611686018427387904 binary: 0100000000000000000000000000000000000000000000000000000000000000 bindec(): 4611686018427387904 NOTA: Observa el cambio? Míralo la próxima vez... input: 9223372036854775807 binary: 0111111111111111111111111111111111111111111111111111111111111111 bindec(): 9223372036854775807 NOTA: PHP_INT_MAX input: -9223372036854775808 binary: 1000000000000000000000000000000000000000000000000000000000000000 bindec(): 9223372036854775808 NOTA: interpretado para ser uno más que PHP_INT_MAX input: -1 binary: 1111111111111111111111111111111111111111111111111111111111111111 bindec(): 18446744073709551616 NOTA: interpretado para ser el mayor entero sin signo (18446744073709551615) aunque sesgada por la precisión del float