(PHP 4, PHP 5, PHP 7, PHP 8)
bindec — Convierte de binario a decimal
Devuelve la conversión de un número binario representado por la cadena
binary_string
a decimal.
bindec() convierte un número binario en un entier, o, si es necesario por razones de tamaño, en un nombre décimal.
bindec() interpreta todos los valores
binary_string
como enteros no firmados.
Esto se debe a que la función bindec() ve
el primer bit como otro orden de magnitud en lugar de como el
bit de signo.
binary_string
La cadena binaria a convertir.
Cualquier carácter inválido en binary_string
es ignorado silenciosamente.
A partir de PHP 7.4.0, proporcionar caracteres inválidos está deprecado.
Este parámetro debe ser un chaîne de caractères. El uso de otro tipo de datos produce resultados inesperados.
El valor decimal de binary_string
Versión | Descripción |
---|---|
7.4.0 | Proporcionar caracteres inválidos generará ahora una advertencia deprecada. El resultado se calculará siempre como si los caracteres inválidos no existieran. |
Ejemplo #1 Ejemplo con 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 la entrada como un entero no firmado
<?php
/*
* Lo más importante en este ejemplo está en la salida
* más que en el código PHP en sí.
*/
$magnitude_lower = pow(2, (PHP_INT_SIZE * 8) - 2);
p($magnitude_lower - 1);
p($magnitude_lower, '¿Ha visto el cambio? Esté atento la próxima vez...');
p(PHP_INT_MAX, 'PHP_INT_MAX');
p(~PHP_INT_MAX, 'interpretado como superior a PHP_INT_MAX');
if (PHP_INT_SIZE == 4) {
$note = 'interpretado como el mayor entero no firmado';
} else {
$note = 'interpretado como el mayor entero no firmado
(18446744073709551615) pero distorsionado por la precisión de los flotantes';
}
p(-1, $note);
function p($input, $note = '') {
echo "entrada : $input\n";
$format = '%0' . (PHP_INT_SIZE * 8) . 'b';
$bin = sprintf($format, $input);
echo "binario : $bin\n";
ini_set('precision', 20); // Para mayor legibilidad en PC de 64 bits.
$dec = bindec($bin);
echo 'bindec() : ' . $dec . "\n";
if ($note) {
echo "Nota : $note\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 : ¿Ha visto el cambio? Esté atento la próxima vez... entrada : 2147483647 binario : 01111111111111111111111111111111 bindec(): 2147483647 Nota : PHP_INT_MAX entrada : -2147483648 binario : 10000000000000000000000000000000 bindec(): 2147483648 Nota : interpretado como superior a PHP_INT_MAX entrada : -1 binario : 11111111111111111111111111111111 bindec(): 4294967295 Nota : interpretado como el mayor entero no firmado
El resultado del ejemplo en equipos de 64 bit sería:
entrada : 4611686018427387903 binario : 0011111111111111111111111111111111111111111111111111111111111111 bindec() : 4611686018427387903 entrada : 4611686018427387904 binario : 0100000000000000000000000000000000000000000000000000000000000000 bindec() : 4611686018427387904 Nota : ¿Ha visto el cambio? Esté atento la próxima vez... entrada : 9223372036854775807 binario : 0111111111111111111111111111111111111111111111111111111111111111 bindec() : 9223372036854775807 Nota : PHP_INT_MAX entrada : -9223372036854775808 binario : 1000000000000000000000000000000000000000000000000000000000000000 bindec() : 9223372036854775808 Nota : interpretado como superior a PHP_INT_MAX entrada : -1 binario : 1111111111111111111111111111111111111111111111111111111111111111 bindec() : 18446744073709551616 Nota : interpretado como el mayor entero no firmado (18446744073709551615) pero distorsionado por la precisión de los flotantes
Nota:
La función puede convertir números que son demasiado grandes para caber en un tipo entier, en cuyo caso estos valores se devuelven como nombre décimal.