Foros del Web » Programando para Internet » PHP »

printf no devuelve valor esperado

Estas en el tema de printf no devuelve valor esperado en el foro de PHP en Foros del Web. Encontré en la sección Empleos de Facebook un área llamada Puzzles (No requiere login http://www.facebook.com/careers/puzzles.php ) en la que uno soluciona puzzles a través de ...
  #1 (permalink)  
Antiguo 04/03/2010, 19:54
Avatar de bng5  
Fecha de Ingreso: junio-2009
Ubicación: 127.0.0.1
Mensajes: 269
Antigüedad: 15 años, 6 meses
Puntos: 24
printf no devuelve valor esperado

Encontré en la sección Empleos de Facebook un área llamada Puzzles (No requiere login http://www.facebook.com/careers/puzzles.php) en la que uno soluciona puzzles a través de scripts en distintos lenguajes. Lo primero que hay que solucionar es la casilla de correos a la que hay que enviar las soluciones: {0xFACEB00C>>2 in decimal}@facebook.com.

Lo primero que hice fue pedirle al CLI de PHP que me lo tradujera:
Código:
~$ php -r 'printf("%[email protected]\n", 0xFACEB00C>>2);'
[email protected]
Por supuesto el e-mail me rebotó, así que intenté con perl:
Código:
~$ perl -e 'printf "%d\@facebook.com\n", 0xFACEB00C>>2'
[email protected]
El resultado obtenido de perl si me funcionó, pero ¿por qué difiere del resultado de php?

Supongo que no es un bug, ya que tengo 3 versiones de PHP en mi computadora y en las 3 me devuelve el mismo resultado ¿erroneo?.
Ahora la pregunta es: ¿Estoy confundido respecto a la analogía entre el código en perl y php o es un error de php?
  #2 (permalink)  
Antiguo 04/03/2010, 20:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: printf no devuelve valor esperado

y si tal ves el puzzle desde PHP es resolver dicha discrepancia??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 04/03/2010, 21:55
Avatar de bng5  
Fecha de Ingreso: junio-2009
Ubicación: 127.0.0.1
Mensajes: 269
Antigüedad: 15 años, 6 meses
Puntos: 24
Exclamación Respuesta: printf no devuelve valor esperado

Cita:
Iniciado por pateketrueke Ver Mensaje
y si tal ves el puzzle desde PHP es resolver dicha discrepancia??
No, no. Creo que mi intento de darle un trasfondo a la consulta pudo confundir todo. Básicamente lo hice para evitar preguntas como: "¿y para qué querés convertir 0xFACEB00C>>2?" y de paso compartir algo que me pareció interesante.

El tema acá es que dos statements que yo consideraba similares me devuelven resultados totalmente diferentes.
  #4 (permalink)  
Antiguo 04/03/2010, 23:01
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: printf no devuelve valor esperado

claro... y definitivamente te he entendido todo desde un principio...

hasta se me hace una monada el valor 0xFACEB00C>>2 jeje...

pero bueno, he probado y tienes toda la razón... esta muy raro que algo que debería ser un estándar no funcione igual en distintos lenguajes... en fin, a ver que nos dicen luego.. ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 04/03/2010, 23:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Muy interesante, acabo de hacer la prueba y efectivamente me da esos valores, es decir un valor diferente para PHP, pero creo que el problema es que el valor se sale del rango de los que acepta PHP, ya que haciendo esta prueba en mi server:
Código:
bash# perl -e 'printf "%d", 2 << 0xFACEB00C'
-> 8192
bash# php -r 'printf("%d", 2 << 0xFACEB00C);'
-> 8192
Da el mismo valor, hay que investigar porque sale de los valores.

Saludos.

Ah efectivamente ya vi la causa del problema, si haces: php -r "echo PHP_INT_MAX;", el máximo valor de PHP es 2147483647, el hex 0xFACEB00C es 4207849484, por lo que al pasarlo por PHP se vuelve un float, y al hacer el shift del float pues pasan cosas extrañas como lo indicado

Bueno solo para poner una posible solución es usar la librería GMP de PHP, lamentablemente no tengo en mi equipo ese dll ni en mi server

Última edición por GatorV; 05/03/2010 a las 00:19

Etiquetas: facebook, perl, printf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:47.