2011-06-27 12 views
7

Próbuję dowiedzieć się, jak modyfikować lokalizacje pamięci za pomocą C++, a kiedy mam problemy z MineSweeper, zauważyłem, że gdy wartość zegara w pamięci wynosiła 1101004800, to było 20 sekund do gry. Cyfry 1101529088 odpowiadają 21 sekundom w grze. Czy ktoś może mi wyjaśnić, jak przekonwertować te 10-cyfrowe długie liczby na 10-zasadnicze?W jaki sposób cyfry 1101004800 odpowiadają numerowi 20?

+0

1101529088 - 1101004800 = 524288 = 2^19. Nie mam pojęcia, co to znaczy. – anon

+0

Czy to może być kleszcze od pewnej epoki? Po prostu zgadywanie, że 41A00000 wydaje się dziwnym adresem wskaźnika. –

Odpowiedz

4

1101004800 dziesiętny to 0x41A00000 hex, który jest reprezentacją IEEE-754 20.0. 1101529088 dziesiętny to 0x41A80000 hex, który jest reprezentacją IEEE-754 21.0.

+0

Dzięki! Czy nie jest dziwne używać float dla licznika, który zawsze jest liczbą całkowitą? – Fred

+0

To wydaje się trochę dziwne, ale może być ku temu dobry powód. – David

8

Używają pływaków do reprezentowania licznika czasu. Oto program, który konwertuje liczby całkowite do pływaków:

#include <stdio.h> 

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

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

    return 0; 
} 

wyjściowa:

20.000000 
21.000000 
+0

Świetnie, wielkie dzięki! – Fred