es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El desplazamiento de bits en C es diferente de PHP.

Tengo una pregunta sobre un pequeño fragmento de código en C para hacer que el mismo fragmento de código funcione en PHP, tiene que ver con un desplazamiento de bits y no puedo averiguar qué está mal.

C:

unsigned u = 3910796769;
u += u << 8;
printf("%u\n",u); 
//Resultado: 52422369

PHP:

$u = 3910796769;
$u += $u << 8;
printf("%u\n",$u);
//Resultado: 1005074769633
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código PHP es que el operador de bits ‘<<‘ en PHP no funciona de la misma manera que en C. En C, el operador ‘<<‘ desplaza los bits del número a la izquierda por el número especificado de posiciones. Sin embargo, en PHP, el operador ‘<<‘ es en realidad un desplazamiento lógico, lo que significa que inserta ceros en las posiciones vacantes en lugar de desplazar los bits.

    Para que el código PHP funcione de la misma manera que el código C, necesitamos usar el operador de desplazamiento de bits ‘<<‘ en PHP, pero con la adición del operador de bits ‘int’ para forzar que el resultado sea un entero:

    PHP:

    $u = 3910796769;
    $u += ($u << 8) & 0xffffffff;
    printf("%u\n",$u);
    // Resultado: 52422369
    

    Al aplicar el operador de bits ‘int’ con el valor desplazado, podemos asegurarnos de que el resultado se trate como un entero en PHP. La adición de ‘& 0xffffffff’ asegura que el resultado esté limitado al valor máximo de un entero sin signo, para que el valor no se desborde.

    Con estos cambios, el código PHP debería producir ahora el mismo resultado que el código C.

Comments are closed.