bindec

(PHP 4, PHP 5, PHP 7)

bindecBinario a decimal

Descripción

bindec ( string $binary_string ) : number

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.

Parámetros

binary_string

El string binario a convertir

Advertencia

Este parámetro debe ser un string. Cualquier otro tipo de dato empleado puede producir resultados inesperados.

Valores devueltos

El valor decimal de binary_string

Ejemplos

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

Notas

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.

Ver también