(PHP 4, PHP 5, PHP 7)
bindec — Binario a decimal
Devuelve el equivalente decimal del número binario representado por
el argumento binary_string
.
bindec() convierte un número binario a un integer o, si es necesario por razones de tamaño, a un 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 el bit de signo.
binary_string
El string binario a convertir
Este parámetro debe ser un string. Cualquier otro tipo de dato empleado puede producir resultados inesperados.
El valor decimal de binary_string
Ejemplo #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
Ejemplo #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 de PHP en sí.
*/
$magnitude_lower = pow(2, (PHP_INT_SIZE * 8) - 2);
p($magnitude_lower - 1);
p($magnitude_lower, '¿Ve el incremento? Obsérvelo la próxima vez...');
p(PHP_INT_MAX, 'PHP_INT_MAX');
p(~PHP_INT_MAX, 'interpretado como uno más que PHP_INT_MAX');
if (PHP_INT_SIZE == 4) {
$nota = 'interpretado como el mayor entero sin signo';
} else {
$nota = 'interpretado como el mayor entero sin signo
(18446744073709551615) aunque sesgado por la precisión del float';
}
p(-1, $nota);
function p($entrada, $nota = '') {
echo "entrada: $entrada\n";
$formato = '%0' . (PHP_INT_SIZE * 8) . 'b';
$bin = sprintf($formato, $entrada);
echo "binario: $bin\n";
ini_set('precision', 20); // Para la legibilidad en bloques de 64 bits.
$dec = bindec($bin);
echo 'bindec(): ' . $dec . "\n";
if ($nota) {
echo "NOTA: $nota\n";
}
echo "\n";
}
?>
El resultado del ejemplo en equipos de 32 bit sería:
entrada: 1073741823 binario: 00111111111111111111111111111111 bindec(): 1073741823 entrada: 1073741824 binario: 01000000000000000000000000000000 bindec(): 1073741824 NOTA: ¿Ve el incremento? Obsérvelo la próxima vez... entrada: 2147483647 binario: 01111111111111111111111111111111 bindec(): 2147483647 NOTA: PHP_INT_MAX entrada: -2147483648 binario: 10000000000000000000000000000000 bindec(): 2147483648 NOTA: interpretado como uno más que PHP_INT_MAX entrada: -1 binario: 11111111111111111111111111111111 bindec(): 4294967295 NOTA: interpretado como el mayor entero sin signo
El resultado del ejemplo en equipos de 64 bit sería:
entrada: 4611686018427387903 binario: 0011111111111111111111111111111111111111111111111111111111111111 bindec(): 4611686018427387903 entrada: 4611686018427387904 binario: 0100000000000000000000000000000000000000000000000000000000000000 bindec(): 4611686018427387904 NOTA: ¿Ve el incremento? Obsérvelo la próxima vez... entrada: 9223372036854775807 binario: 0111111111111111111111111111111111111111111111111111111111111111 bindec(): 9223372036854775807 NOTA: PHP_INT_MAX entrada: -9223372036854775808 binario: 1000000000000000000000000000000000000000000000000000000000000000 bindec(): 9223372036854775808 NOTA: interpretado como uno más que PHP_INT_MAX entrada: -1 binario: 1111111111111111111111111111111111111111111111111111111111111111 bindec(): 18446744073709551616 NOTA: interpretado como el mayor entero sin signo (18446744073709551615) aunque sesgado por la precisión del float
Nota:
Esta función puede convertir números que son demasiado grandes para caber en el tipo integer de cada plataforma, devolviendo en este caso un valor de tipo float para los valores mayores.