(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 entero, o, si es necesario por razones de tamaño, en un número decimal.
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 string. 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 ejemplo anterior mostrará :
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";
}
?>Resultado del ejemplo anterior en una máquina de 32 bits :
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
Resultado del ejemplo anterior en una máquina de 64 bits :
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 entero, en cuyo caso estos valores se devuelven como número decimal.