Non sarà in grado di capire questo a meno che non si sa su:
- hex/represenation binario, e
- endianess CPU.
Immettere il numero decimale 320 in esadecimale. Dividi in byte. Supponendo che int
sia 4 byte, dovresti essere in grado di dire quali parti del numero vanno in byte.
Dopodiché, considera la endianità della CPU specificata e ordina i byte in tale ordine. (Prima il byte MS o il byte LS.)
Il codice accede al byte assegnato all'indirizzo più basso del numero intero. Ciò che contiene dipende dall'aspetto della CPU. Otterrai l'esadecimale 0x40 o l'esadecimale 0x00.
Nota: Si consiglia di non utilizzare char
per questo tipo di cose, perché ha signedness implementazione definita. Nel caso in cui i byte di dati contengano valori maggiori di 0x7F, si potrebbero ottenere alcuni bug molto strani, che appaiono/scompaiono in modo incoerente tra più compilatori. Utilizzare sempre uint8_t*
quando si esegue qualsiasi forma di manipolazione bit/byte.
È possibile esporre questo bug sostituendo 320 con 384. Il vostro sistema little endian può quindi stampare -128 o 128, otterrete risultati diversi su diversi compilatori.
suggerimento: qual è la dimensione del carattere? sarebbe adatto ... – nayana
'320' in esadecimale è' 0x140'. '0x40' in decimale è' 64'. Altre domande? –
@MichaelWalz .. oh in questo modo non imparerà nulla: D – nayana