2011-06-27 13 views
7

Estoy tratando de aprender cómo modificar las ubicaciones de memoria usando C++ y cuando jugueteaba con MineSweeper, noté que cuando el valor del reloj en la memoria era 1101004800, transcurrieron 20 segundos en el juego. Los dígitos 1101529088 corresponden con 21 segundos de iniciado el juego. ¿Puede alguien explicarme cómo convertir esos números largos de 10 dígitos en base 10?¿Cómo se corresponden los dígitos 1101004800 con el número 20?

+0

1101529088 - 1101004800 = 524288 = 2^19. No tengo idea de lo que esto significa. – anon

+0

¿Podrían ser garrapatas desde alguna época? Simplemente adivinar como 41A00000 parece una dirección de puntero extraño. –

Respuesta

4

1101004800 decimal es 0x41A00000 hex, que es la representación IEEE-754 de 20.0. 1101529088 decimal es 0x41A80000 hexadecimal, que es la representación IEEE-754 de 21.0.

+0

¡Gracias! ¿No es extraño usar un flotador para un contador que siempre es un número entero? – Fred

+0

Eso parece un poco extraño, pero puede haber una buena razón para ello. – David

8

Están utilizando flotadores para representar el temporizador. Aquí es un programa que convierte los números enteros a los flotadores:

#include <stdio.h> 

int main() { 
    int n = 1101004800; 
    int n2 = 1101529088; 

    printf("%f\n", *((float*)&n)); 
    printf("%f\n", *((float*)&n2)); 

    return 0; 
} 

Salida:

20.000000 
21.000000 
+0

Genial, muchas gracias! – Fred

Cuestiones relacionadas