(PHP 4, PHP 5)
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
Versión | Descripción |
---|---|
4.1.0 | Esta función puede ahora convertir números que son demasiado grandes para encajar en el tipo integer de la plataforma, siendo devueltos los valores más grandes, en este caso, como float. |
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 bits 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 bits 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