Come viene calcolato questo numero?

1

Ho numeri;

A == 0x20000000
B == 18
C == (B/10)
D == 0x20000004 == (A + C)

A e D sono in esadecimale, ma non sono sicuro di quali siano le basi numeriche presunte degli altri (anche se assumerei la base 10 dal momento che non stabiliscono esplicitamente una base.

Può o non può essere rilevante, ma ho a che fare con gli indirizzi di memoria, A e D sono puntatori.

La parte che non riesco a capire è come 18/10 mi dà 0x4.

Modifica: codice per chiarezza:

*address1 (pointer is to address: 0x20000000)

printf("Test1: %p\n", address1);
printf("Test2: %p\n", address1+(18/10));
printf("Test3: %p\n", address1+(21/10));

Output:

Test1: 0x20000000
Test2: 0x20000004
Test3: 0x20000008
    
posta Hamid 02.09.2012 - 21:47
fonte

1 risposta

10

Nota alcuni fatti:

1) quando aggiungi un valore all'indirizzo viene aumentato di quel valore moltiplicato per il numero di byte contenuti in una parola, non semplicemente per quel valore;

2) 18/10 == 1 quando si tratta di numeri interi;

3) 21/10 == 2 quando si tratta di numeri interi;

4) la dimensione della parola è 4 in questo caso (come si nota dalla dimensione del puntatore, essendo 32 bit);

Di conseguenza:

0x20000000 + 4 * (18/10) = 0x20000000 + 4 * 1 = 0x20000004
0x20000000 + 4 * (21/10) = 0x20000000 + 4 * 2 = 0x20000008

Modifica
Come sottolineato Vatine , è importante capire che il puntatore viene incrementato di un valore moltiplicato per 4 (cioè la dimensione di una parola in un sistema a 32 bit) perché questa è la dimensione del tipo di dati per cui è stata creata la variabile puntatore (un int ).

    
risposta data 02.09.2012 - 22:19
fonte

Leggi altre domande sui tag