
Il metodo hex() in Python
Il metodo hex() in Python ti fornisce una rappresentazione esadecimale di un numero in virgola mobile.
obj.hex()
L'oggetto "obj" è un numero in virgola mobile (float).
Il metodo hex() restituisce una stringa con la rappresentazione esadecimale del numero in virgola mobile.
E' un metodo degli oggetti di tipo "float". Quindi, non puoi applicarlo sui numeri interi.
Ecco un esempio pratico.
Assegna il valore decimale 7.5 alla variabile "num".
num = 7.5
Poi chiama il metodo hex() dall'oggetto "num"
num.hex()
Il metodo ti restituisce questa stringa con la rappresentazione esadecimale del numero 7.5
'0x1.e000000000000p+2'
Quest'ultima rappresentazione è composta da una parte esadecimale e una parte esponenziale.
Ti spiego come leggerla.
- 0x è il prefisso della rappresentazione esadecimale. In pratica, ti avvisa che ciò che segue è un numero in base 16.
'0x1.e000000000000p+2'
- 1.e000000000000 è la parte esadecimale del numero. La parte prima del punto "." è la parte intera. Quella dopo il punto "." rappresenta la frazione esadecimale del numero. In questo caso 1.e in esadecimale equivale a 1.875.
'0x1.e000000000000p+2'
Perché? La cifra "1" si trova nella posizione delle unità. In decimale, "1" in esadecimale vale sempre 1. La cifra "e" si trova nella prima posizione dopo il punto esadecimale. In esadecimale, "e" rappresenta il numero 14 (poiché a=10, b=11, c=12, d=13, e=14, f=15). Poiché si trova nella prima posizione dopo il punto, rappresenta la frazione 14/16 = 0.875 in decimale. Sommando queste due parti, otteniamo: $$ 1 + 0.875 = 1.875 $$
- p+2 è la parte esponenziale del numero esadecimale. Il simbolo p indica che ciò che segue è un esponente in base 2. L'esponente +2 vuol dire che il numero esadecimale deve essere moltiplicato per 22 (cioè 4).
'0x1.e000000000000p+2'
Quindi, 1.e in esadecimale (1.875 in decimale) moltiplicato per 4 dà 7.5 in decimale.
$$ 1.e \cdot 2^2 = 1.875 \cdot 4 = 7.5$$
In conclusione, il metodo num.hex() ti fornisce un modo preciso per rappresentare un numero in virgola mobile in base 16.