Qu'est-ce que le système hexadécimal?


13

Qu'est-ce que le système hexadécimal et pourquoi est-il tellement utilisé en informatique? Je sais que les ordinateurs utilisent des 0 et des 1 pour stocker des données, alors comment se fait-il que nous utilisions de l'hexadécimal?


13
Si ce n'est pas hors sujet, comment une telle question de base n'est-elle pas un doublon 5 ans après le démarrage de Super User?
Peter Mortensen

3
@PeterMortensen Encore plus bizarre, cela n'a même pas encore été demandé sur aucun des sites sœurs, du moins, pas que je puisse trouver.
Nzall

9
Peut-être que cela n'a pas besoin d'être demandé car Wikipedia a une assez bonne réponse: en.wikipedia.org/wiki/Hexadecimal
Piers Myers

4
Pourquoi tant de votes positifs?
Vi.

Réponses:


31

L'hexadécimal est un système numérique très courant en informatique. Vous avez peut-être déjà entendu parler du binaire , qui n'a que 1 et 0.

Les humains utilisent principalement le système décimal (base 10), dans lequel nous avons 10 chiffres:

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

Cependant, les ordinateurs ne fonctionnent pas en utilisant le système décimal. Ils ont un état binaire (quelque chose est vrai ou faux) et fonctionne donc en base 2 (les nombres binaires sont généralement préfixés 0b) avec les seuls chiffres étant 0 et 1.

Auparavant, l' octal (ou base 8) était utilisé. C'était bien parce que "10" en base 8 était "0b1000" en binaire (10 en décimal est 1010 en binaire). Octal est généralement préfixé "0o" lors de l'écriture de nombres (mais est préfixé juste '0' dans la plupart des langages de programmation). Cela s'appelle la base 8 parce que nous avons huit chiffres.

Octal est toujours utilisé aujourd'hui, principalement lors de la définition des autorisations sous Unix et Linux

Au fil du temps, nous avions besoin d'un moyen plus facile de représenter de plus grands nombres, car la puissance de calcul et l'espace augmentaient rapidement. Il est devenu la norme d'utiliser hexadécimal , ou base 16, car 16, comme 8 est une puissance de 2, ce qui facilite la conversion chiffre par chiffre (voir ce commentaire .Parce qu'il y a 16 chiffres, des lettres ont été utilisées pour les autres chiffres. En outre, hex est généralement préfixé avec 0x.

Les nombres hexadécimaux sont également utiles car un nombre hexadécimal est de 4 bits (1 nombre octal peut représenter 2), et donc deux nombres dans un octet. Dans la plupart des éditeurs hexadécimaux , c'est ainsi qu'un octet est représenté.

Compte

En base 10, nous avons 10 chiffres. Après 9, que faisons-nous? Nous n'avons plus de chiffres. Nous créons un "dizaines" à gauche du nombre d'origine, ce sera 1 et le plus à droite devient 0. La même chose se produit également en hexadécimal:

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

Jusqu'à ce que nous arrivions à 0x1F, puis le processus se répète jusqu'à 0xFF (255 en décimal), puis nous obtenons 0x100. Vous trouverez plus d'informations sur le comptage ici .

Voici un graphique montrant les conversions entre décimal, hexadécimal, octal et binaire: Tableau de conversion hexadécimal


21
Le principal avantage est que, comme 16 est une puissance de 2, vous pouvez effectuer des conversions chiffre par chiffre.
TRiG

2
Notez que de nombreuses langues utilisent le 0préfixe et non les 0onombres octaux.
ysap

2
Votre note sur 16 étant un multiple de 2 est incorrectement copiée à partir du commentaire de TRiG. Être multiple n'est pas la relation pertinente.
Ryan Reich

2
@ justcool393, peut être utile de mentionner que le nom de ce que vous appelez "base 10" est en fait "décimal". Cela peut aider à clarifier la relation entre la base 8 (octale), la base 10 (décimale) et la base 16 (hexadécimale).
HalosGhost

3
Arrrg. Chaque base est une base 10! stale.soup.io/post/114652207/every-base-is-base-10
woliveirajr

4

Quel est le système hexadécimal

Le système hexadécimal est le système de numérotation en base 16 qui utilise 16 chiffres ( 0123456789ABCDEF), par opposition au binaire qui utilise 2 ( 01), ou décimal qui utilise 10 (0-9). Puisqu'il n'y a que 10 chiffres (dans notre système), les lettres de A à F sont utilisées pour décrire "chiffre # 10", "chiffre # 11", etc. à la place.

pourquoi est-il tellement utilisé en informatique

16 est une puissance de 2, ce qui facilite la conversion des nombres hexadécimaux en nombres binaires et, comme vous l'avez noté, "les ordinateurs utilisent des 0 et des 1 pour stocker les données". Étant donné que chaque chiffre stocke exactement 4 bits de données, un chiffre hexadécimal peut être converti en 4 chiffres binaires (1 bit) très facilement, et vice versa.

| 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 |

comment se fait-il que nous utilisons hexadécimal

Il est plus facile que binaire de représenter de grands nombres. Seuls deux chiffres hexadécimaux peuvent représenter 256 valeurs différentes, comme dans:

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 ...

Quatre chiffres hexadécimaux peuvent représenter 65536 valeurs, etc. Hex facilite beaucoup l'inspection des données avec quelque chose appelé hexdump , car les lettres, les chiffres et la ponctuation sont stockés dans un format qui mappe chaque caractère à un nombre compris entre 0 et 256 (appelé ASCII , ou parfois en utilisant d'autres encodages). En outre, de nombreux autres formats de fichiers (comme PNG) sont adaptés de sorte que chaque élément d'information qui compose le fichier contienne 256 bits.

En résumé, 16 est une puissance de 2 et 256 est une puissance de 16. Cela en fait un bon moyen de représenter à la fois des nombres binaires et du texte ou d'autres données.


2

Qu'est-ce que le système hexadécimal?

Si vous avez un nombre abcd, cela équivaut à ((a * + b) + c) + d. C'est donc comme:

  • abcd (binaire) = ((a * 2 + b) * 2 + c) * 2 + d
  • abcd (octal) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (décimal) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (hexadécimal) = ((a * 16 + b) * 16 + c) * 16 + d

Dans un système hexadécimal, vous avez besoin de 16 chiffres, mais nous n'avons que dix chiffres disponibles (0..9). Ainsi, pour les 6 chiffres manquants, les caractères A..F sont utilisés avec A = 10, ..., F = 15.

Bien sûr, vous pouvez également penser à de nombreux autres systèmes numériques, par exemple avec une base de 5 ou 7.

Pour le calcul avec des nombres, peu importe la base que vous utilisez. Vous pouvez ajouter et multiplier dans le système binaire, vous pouvez le faire dans le système décimal et vous pouvez le faire dans le système hexadécimal. Nous sommes habitués à calculer dans le système décimal, les ordinateurs le font dans le système binaire.

Pourquoi le système hexadécimal est-il si utilisé en informatique?

Comme indiqué ci-dessus, peu importe dans quel système de numérotation vous donnez un nombre. Le nombre sous-jacent est le même, seule la représentation change. L'ordinateur stockera et utilisera toujours en interne (par exemple calculer avec) des nombres en binaire.

Alors pourquoi les programmeurs (comme moi) utilisent-ils des systèmes numériques différents? Il y a deux raisons de choisir un système numérique basé sur une puissance de 2. La première est la brièveté et la seconde est une bonne vue des bits qui sont définis.

Essoufflement

Si j'ai une fonction qui écrit le contenu d'un tampon sur la console, je pourrais écrire du code qui s'imprime en décimal, qui est de 1 à 3 chiffres (décimal: 0..255). Si j'écris le nombre au format binaire, je me retrouverais avec une sortie de 1 à 8 chiffres (binaire: 0..11111111). Je pourrais également utiliser le système octal et me retrouver avec 1 à 3 chiffres (octal: 0..377) ou hexadécimal avec 1 à 2 chiffres (hexadécimal: 0..ff).

C'était pour un seul octet. Supposons maintenant que vous vouliez écrire un nombre 32 bits:

  • binaire: 0..1111111111111111111111111111111111
  • octal: 0..37777777777
  • décimal: 4294967295
  • hexadécimal: 0..ffffffff

Comme vous pouvez le voir, la sortie hexadécimale est la plus courte.

Voir les bits

Un modèle courant pour stocker les informations emballées consiste à utiliser chaque bit dans un octet individuellement. Prenons par exemple les attributs de fichier (voir MDSN ). Vous voulez les attributs "caché", "archive", "lecture seule", "temporaire" et autres. Vous pouvez stocker chaque attribut dans un octet ou vous pouvez regrouper les informations dans un octet (ou plusieurs octets) où chaque bit représente exactement un attribut. Si vous regardez les dwFlagsAndAttributes dans l'article MSDN, vous pouvez voir que Windows utilise ce modèle.

En restant sur la page MSDN, prenons FILE_ATTRIBUTE_ENCRYPTEDcomme exemple, cet indicateur est décimal 16384 et hexadécimal 0x4000. Le "0x" de tête n'est qu'une convention du programmeur C pour marquer les nombres hexadécimaux, donc nous allons simplement regarder 4000. Lorsque vous voulez savoir quels bits sont définis, vous devrez d'abord convertir 16384 en binaire - rien que vous pourriez faire normalement avec l'arithmétique mentale. Mais prenons hexadécimal 4000. C'est assez facile. 16 est 2 * 4, donc chaque nombre hexadécimal est exactement 4 bits. Par conséquent, nous convertissons simplement 4 en binaire 0100 et les zéros en binaire 0000 et nous avons terminé.

Souvent, il ne s'agit pas de bits individuels, mais les programmeurs ont tendance à aligner les choses sur des puissances de 2. Nous aimons charger des programmes non pas sur une adresse aléatoire mais sur une adresse avec les 16 bits les moins significatifs mis à zéro. De cette façon, si vous avez une adresse 0x12345678, vous pouvez facilement voir que cette adresse appartient au programme chargé sur 0x1234 et non à celui chargé sur 0x03810000.

Vous préférez binaire, octal ou hexadécimal?

C'est une question de saveur. Si vous voulez directement voir les bits binaires, ça pourrait être bien. Pour les nombres longs, le binaire peut être frustrant si vous devez compter les chiffres pour voir si le bit 23 ou le bit 24 est défini. C'est plus facile avec hexadécimal car chaque chiffre représente 4 bits, donc vous avez moins de comptage impliqué. Personnellement, j'utilise rarement l'octal. C'est très rare.

Mais pourquoi ne pas utiliser la base 32?

La base 32 est une puissance de 2, c'est super. Mais vous auriez besoin de 32 chiffres comme 0..9, A..V. Il s'agit de bien plus de chiffres à retenir (pouvez-vous facilement repérer à quel numéro «S» répondrait?). Une autre mise en garde est qu'avec la base 32, vous perdez la fonctionnalité intéressante que deux chiffres hexadécimaux sont exactement un octet, ce qui est très pratique si vous regardez le contenu de la mémoire! De plus, avec la base 32, vous avez toujours besoin de 2 chiffres pour représenter les valeurs qu'un octet peut avoir. Pour une valeur de 32 bits, vous n'avez besoin que de 7 chiffres au lieu de 8 chiffres hexadécimaux, mais ce n'est pas tellement vivre avec les inconvénients du système de base 32.


1

Les différents systèmes de représentation numérique actuellement utilisés sont (= comprennent):
binaire, octal, décimal et hexadécimal.
Le choix dépend souvent de la facilité d'utilisation de la tâche à accomplir.

le binaire est utilisé dans les systèmes informatiques et la technologie numérique en général, car il est facile à représenter dans l'électronique; Les fonctions pour les nombres en base 2 sont faciles à créer, tout comme la représentation des informations d'activation / désactivation, vrai / faux ou toute autre information similaire à deux états répétitifs.

octal est bien d'avoir s'il y a des groupes de trois chiffres binaires, par exemple comme c'est le cas dans les paramètres d'autorisation sous Unix / Linux.

en sautant la décimale pendant un moment, l' hexadécimal est agréable de la même manière que l'octal mais pour quatre chiffres binaires, et le fait que 8 bits, un octet, s'intègre parfaitement dans deux chiffres hexadécimaux. ( = la réponse )
Il s'ensuit que les groupes pairs de 8 bits d'un ordinateur sont facilement écrits, représentés et compris - c'est-à-dire; très pratique dans l'utilisation quotidienne lors de l'écriture de logiciels, de la manipulation de données (par exemple, les valeurs de couleur RVB en HTML / CSS), de la formation de structures de données et de toute autre chose similaire.

décimal . On pourrait deviner que le système décimal s'est développé à partir du fait que nous avons dix doigts et orteils. Un seul chiffre représente le nombre d'articles comptés, un pour chaque doigt jusqu'au maximum dix.

Ceux-ci représentent des systèmes numériques avec une base de:
2, 8, 10 et 16.

Généralement, la base indique le nombre d '"éléments" à un chiffre que vous pouvez compter, par exemple, le binaire en a deux, le décimal en a dix.
Comme hexadécimal a 16 éléments à un chiffre, le système nécessite 16 "nombres", donc en utilisant 0-9 et af (6 supplémentaires, par rapport à décimal), où "a" est égal à 10 et "f" est égal à 15 dans le système décimal.

Pour continuer avec le mode général: n'importe quelle base 2 ou supérieure fonctionne aussi bien que n'importe quoi d'autre, tant que vous avez une belle représentation à un chiffre.

Les nombres en décimal sont formés par:

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

pour un nombre décimal "dcba" - avec d, c, b, a, choisi parmi 0123456789

Maintenant, changez cela en:

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

et vous avez une forme plus générale qui montre comment toute base 2 ou supérieure "fonctionne";
Par exemple, un système à cinq chiffres, base 5 pourrait être aussi pratique que n'importe lequel des autres ci-dessus, ou pourquoi pas un système à 12 chiffres (une douzaine) pour le temps (12 heures = "10" base 12, avec la première "décimale" indiquant laquelle 1 / 12ème [5 minutes] d'une heure c'est)

Remarque: ⁰¹²³ - exposant 0123 si votre écran affiche autre chose


Actuellement, cela pourrait être un «bout» de ce qu'il peut réellement devenir.
Hannu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.