Cos'è il sistema esadecimale?


13

Cos'è il sistema esadecimale e perché viene utilizzato così tanto nell'informatica? So che i computer usano 0 e 1 per archiviare i dati, quindi come mai usiamo esadecimali?


13
Se non off-topic, in che modo una domanda di base non può essere duplicata 5 anni dopo l'inizio di Super User?
Peter Mortensen,

3
@PeterMortensen Ancora più strano, almeno non è stato ancora chiesto su nessuno dei siti gemelli, non che io possa trovare.
Nzall,

9
Potrebbe non essere necessario chiederlo perché Wikipedia ha una risposta abbastanza buona: en.wikipedia.org/wiki/Hexadecimal
Piers Myers,

4
Perché così tanti voti positivi?
Vi.

Risposte:


31

L'esadecimale è un sistema numerico molto comune nell'informatica. Potresti aver sentito parlare di binario prima, che ha solo 1 e 0 secondi.

Gli umani usano principalmente il sistema decimale (base 10), in cui abbiamo 10 numeri:

0, 1, 2, 3, 4, 5, 6, 7, 8 e 9

Tuttavia, i computer non funzionano utilizzando il sistema decimale. Hanno uno stato binario (qualcosa è vero o falso) e quindi opera nella base 2 (i numeri binari sono solitamente prefissati 0b) con i soli numeri che sono 0 e 1.

In passato veniva usato l' ottale (o la base 8). Era buono perché "10" in base 8 era "0b1000" in binario (10 in decimale è 1010 in binario). Di solito Octal ha il prefisso "0o" quando si scrivono numeri (ma è preceduto da "0" nella maggior parte dei linguaggi di programmazione). Si chiama base 8 perché abbiamo otto numeri.

Octal è ancora in uso oggi, soprattutto quando si impostano le autorizzazioni in Unix e Linux

Col passare del tempo, avevamo bisogno di un modo più semplice per rappresentare numeri più grandi, poiché la potenza di calcolo e lo spazio stavano rapidamente aumentando. È diventato lo standard usare esadecimale , o base 16, perché 16, come 8, è una potenza di 2, il che rende facile eseguire la conversione cifra per cifra (vedi questo commento . Poiché ci sono 16 numeri, le lettere sono state usate per gli altri numeri. Inoltre, hex è di solito preceduto da 0x.

I numeri esadecimali sono utili anche perché un numero esadecimale è di 4 bit (1 numero ottale può rappresentare 2), e quindi due numeri in un byte. Nella maggior parte degli editor esadecimali , è così che viene rappresentato un byte.

Conteggio

Nella base 10, abbiamo 10 numeri. Dopo le 9, cosa facciamo? Siamo fuori dai numeri. Creiamo un "decimo" posto a sinistra del numero originale, che sia 1 e quello più a destra diventa 0. La stessa cosa accade anche in esadecimale:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, ecc

Fino a quando non arriviamo a 0x1F, quindi il processo si ripete fino a 0xFF (255 in decimale) e quindi otteniamo 0x100. Ulteriori informazioni sul conteggio sono disponibili qui .

Ecco un grafico che mostra le conversioni tra decimale, esadecimale, ottale e binario: Grafico di conversione esadecimale


21
Il vantaggio principale è che, poiché 16 è una potenza di 2, è possibile effettuare conversioni cifra per cifra.
TRiG

2
Nota che molte lingue usano il 0prefisso e non 0oper i numeri ottali.

2
La tua nota sul fatto che 16 è un multiplo di 2 viene erroneamente copiata dal commento di TRiG. Essere un multiplo non è la relazione rilevante.
Ryan Reich,

2
@ justcool393, vale la pena ricordare che il nome di quello che chiami "base 10" è in realtà "decimale". Questo può aiutare a chiarire la relazione tra base 8 (ottale), base 10 (decimale) e base 16 (esadecimale).
HalosGhost


4

Qual è il sistema esadecimale

Il sistema esadecimale è il sistema di numerazione base-16 che utilizza 16 cifre ( 0123456789ABCDEF), al contrario del binario che utilizza 2 ( 01) o decimale che utilizza 10 (0-9). Dal momento che ci sono solo 10 cifre numeriche (nel nostro sistema), le lettere da A a F vengono utilizzate per descrivere "cifra # 10", "cifra # 11", ecc.

perché viene utilizzato così tanto nell'informatica

16 è una potenza di 2, che semplifica la conversione di numeri esadecimali in numeri binari e, come hai notato, "i computer usano 0 e 1 secondi per memorizzare i dati". Poiché ogni cifra memorizza esattamente 4 bit di dati, una cifra esadecimale può essere convertita in 4 cifre binarie (1 bit) molto facilmente e viceversa.

| hex bin  | hex bin  |
| 0   0000 | 8   1000 |
| 1   0001 | 9   1001 |
| 2   0010 | A   1010 |
| 3   0011 | B   1011 |
| 4   0100 | C   1100 |
| 5   0101 | D   1101 |
| 6   0110 | E   1110 |
| 7   0111 | F   1111 |

come mai usiamo esadecimali

Rende più facile che binario rappresentare grandi numeri. Solo due cifre esadecimali possono rappresentare 256 valori diversi, come in:

dec  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...

Quattro cifre esadecimali possono rappresentare 65536 valori e così via. Hex rende molto più facile ispezionare i dati con qualcosa chiamato hexdump , poiché lettere, numeri e punteggiatura sono memorizzati in un formato che associa ogni carattere a un numero compreso tra 0 e 256 (chiamato ASCII , o talvolta usando altre codifiche). Inoltre, molti altri formati di file (come PNG) sono personalizzati in modo tale che ogni informazione composta dal file contenga 256 bit.

In sintesi, 16 è una potenza di 2 e 256 è una potenza di 16. Questo lo rende un buon modo per rappresentare sia numeri binari che testo o altri dati.


2

Cos'è il sistema esadecimale?

Se hai un numero abcd, allora questo equivale a ((a * + b) + c) + d. Quindi questo è come:

  • abcd (binario) = ((a * 2 + b) * 2 + c) * 2 + d
  • abcd (ottale) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (decimale) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (esadecimale) = ((a * 16 + b) * 16 + c) * 16 + d

In un sistema esadecimale sono necessarie 16 cifre, ma sono disponibili solo dieci cifre (0..9). Quindi per le 6 cifre mancanti vengono usati i caratteri A..F con A = 10, ..., F = 15.

Ovviamente potresti anche pensare a molti altri sistemi numerici, ad esempio con base 5 o 7.

Per il calcolo con numeri non importa quale base si sta utilizzando. Puoi aggiungere e moltiplicare nel sistema binario, puoi farlo nel sistema decimale e puoi farlo nel sistema esadecimale. Siamo abituati a calcolare nel sistema decimale, i computer lo fanno nel sistema binario.

Perché il sistema esadecimale è utilizzato così tanto nell'informatica?

Come detto sopra, non importa in quale sistema di numeri dai un numero. Il numero sottostante è lo stesso, cambia solo la rappresentazione. Il computer memorizzerà e utilizzerà internamente sempre (ad es. Calcola con) i numeri in formato binario.

Quindi perché i programmatori (come me) usano sistemi numerici diversi? Esistono due motivi per scegliere un sistema numerico basato su una potenza di 2. Il primo è la brevità e il secondo è una buona visione di quali bit sono impostati.

brevità

Se ho una funzione che sta scrivendo il contenuto di un buffer sulla console, allora potrei scrivere il codice che stampa in decimale, che è da 1 a 3 cifre (decimale: 0..255). Se scrivo il numero in formato binario, finirei con un output da 1 a 8 cifre (binario: 0..11111111). Potrei anche usare il sistema ottale e finire con 1 o 3 cifre (ottale: 0..377) o esadecimale con 1 o 2 cifre (esadecimale: 0..ff).

Questo era solo per un byte. Supponiamo ora che tu voglia scrivere un numero a 32 bit:

  • binario: 0..11111111111111111111111111111111
  • ottale: 0..37777777777
  • decimale: 4294967295
  • esadecimale: 0..ffffffff

Come puoi vedere, l'output esadecimale è il più breve.

Vedendo i bit

Un modello comune per archiviare le informazioni imballate è utilizzare ogni bit in un byte singolarmente. Prendiamo ad esempio gli attributi di file (vedi MDSN ). Volete gli attributi "nascosto", "archivio", "sola lettura", "temporaneo" e altri. È possibile memorizzare ciascun attributo in un byte oppure racchiudere le informazioni in un byte (o più byte) in cui ogni bit rappresenta esattamente un attributo. Se dai un'occhiata a dwFlagsAndAttributes nell'articolo di MSDN puoi vedere che Windows sta usando questo modello.

Rimanendo sulla pagina MSDN prendiamo FILE_ATTRIBUTE_ENCRYPTEDad esempio, questo flag è decimale 16384 ed esadecimale 0x4000. Il principale "0x" è solo una convenzione del programmatore C per contrassegnare i numeri esadecimali, quindi guarderemo solo 4000. Quando vuoi sapere quali bit sono impostati, dovrai prima convertire 16384 in binario - niente che potresti fare normalmente con l'aritmetica mentale. Ma prendiamo esadecimali 4000. Questo è abbastanza facile. 16 è 2 * 4, quindi ogni numero esadecimale è esattamente 4 bit. Quindi convertiamo semplicemente 4 in binario 0100 e gli zero in binario 0000 e abbiamo finito.

Spesso non si tratta di singoli bit ma i programmatori tendono ad allineare le cose a potenze di 2. Ci piace caricare i programmi non su un indirizzo casuale ma su un indirizzo con i 16 bit meno significativi impostati su zero. In questo modo se hai un indirizzo 0x12345678 puoi facilmente vedere che questo indirizzo appartiene al programma caricato su 0x1234 e non a quello caricato su 0x03810000.

Preferisci binario, ottale o esadecimale?

Questa è una questione di sapore. Se vuoi vedere direttamente i bit binari potrebbe andare bene. Per numeri lunghi il binario potrebbe essere frustrante se si devono contare le cifre per vedere se è impostato il bit 23 o il bit 24. Questo è più facile con gli esadecimali perché ogni cifra rappresenta 4 bit, quindi hai meno conteggi coinvolti. Personalmente uso raramente ottale. È molto raro.

Ma perché non usare la base 32?

Base 32 ha una potenza di 2, questo è fantastico. Ma avresti bisogno di 32 cifre come 0..9, A..V. Questo è molto più cifre da ricordare (puoi facilmente individuare a quale numero 'S' risponderebbe?). Un altro avvertimento è che con la base 32 perdi la bella caratteristica che due cifre esadecimali sono esattamente un byte, il che è molto utile se dai un'occhiata al contenuto della memoria! Inoltre con la base 32 sono ancora necessarie 2 cifre per rappresentare i valori che un byte può avere. Per un valore di 32 bit sono necessarie solo 7 cifre anziché 8 cifre esadecimali, ma non è così tanto da convivere con gli svantaggi del sistema di base 32.


1

Diversi sistemi di rappresentazione numerica oggi in uso sono (= include):
binario, ottale, decimale ed esadecimale.
Quale scegliere spesso dipende dalla facilità d'uso per l'attività da svolgere.

il binario viene utilizzato all'interno dei sistemi informatici e della tecnologia digitale in generale, poiché è facile da rappresentare all'interno dell'elettronica; le funzioni per i numeri di base 2 sono facili da costruire, così come la rappresentazione di on / off, vero / falso o qualsiasi altra informazione simile a due stati ripetuta.

ottale è bello avere se ci sono gruppi di tre cifre binarie, ad esempio come nelle impostazioni delle autorizzazioni in Unix / Linux.

saltando il decimale per un momento, l' esadecimale è bello allo stesso modo dell'ottale ma per quattro cifre binarie e il fatto che 8 bit, un byte, si adatta perfettamente a due cifre esadecimali. ( = la risposta )
Ne consegue che i gruppi pari-8-bit in un computer possono essere facilmente scritti, rappresentati e compresi - cioè; molto comodo nell'uso quotidiano quando si scrive software, si gestiscono dati (ad es. valori di colore RGB in HTML / CSS), si formano strutture di dati e qualsiasi altra cosa simile.

decimale . Si potrebbe immaginare che il sistema decimale si sia sviluppato dal fatto che abbiamo dieci dita dei piedi e dei piedi. Una singola cifra rappresenta il numero di elementi contati, uno per ogni dito fino a un massimo di dieci.

Questi rappresentano sistemi numerici con una base di:
2, 8, 10 e 16.

Generalmente la base indica quanti "elementi" a cifra singola puoi contare, ad esempio binario ha due, decimale ha dieci.
Dato che l'esadecimale ha 16 voci a una cifra, il sistema richiede 16 "numeri", quindi usando 0-9 e af (6 extra, rispetto al decimale), dove "a" è uguale a 10 e "f" è uguale a 15 nel sistema decimale.

Per continuare con la modalità generale: qualsiasi base 2 o superiore funziona così come qualsiasi altra cosa, purché tu abbia una bella rappresentazione a una sola cifra.

I numeri in decimale sono formati da:

... d * 10³ + c * 10² + b * 10¹ + a * 10⁰

per un numero decimale "dcba" - con d, c, b, a, scelto da 0123456789

Ora cambialo in:

... d * base³ + c * base² + b * base¹ + a * base⁰

e hai una forma più generale che mostra come funziona qualsiasi base 2 o superiore;
ad es. una base a cinque cifre, la base 5 potrebbe essere comoda come una qualsiasi delle precedenti, o perché non un sistema a 12 cifre (una dozzina) per il tempo (12 ore = "10" base 12, con il primo "decimale" che indica quale 1/12 [5 minuti] di un'ora è)

Nota: ⁰¹²³ - apice 0123 se lo schermo mostra qualcos'altro


Attualmente questo potrebbe essere uno "stub" di ciò che può effettivamente diventare.
Hannu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.