bindec

(PHP 4, PHP 5, PHP 7, PHP 8)

bindecConvierte de binario a decimal

Descripción

bindec(string $binary_string): int|float

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.

Parámetros

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.

Advertencia

Este parámetro debe ser un chaîne de caractères. El uso de otro tipo de datos produce resultados inesperados.

Valores devueltos

El valor decimal de binary_string

Historial de cambios

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.

Ejemplos

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

Notas

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.

Ver también

  • decbin() - Convierte de decimal a binario
  • octdec() - Conversión de octal a decimal
  • hexdec() - Convierte de hexadecimal a decimal
  • base_convert() - Convierte un número entre bases arbitrarias