bin_dec_hex - Comment utiliser la notation binaire, décimale et hexadécimale.
La plupart des gens utilisent le système de numérotation décimale. Ce système utilise dix symboles pour représenter les nombres. Lorsque ces dix symboles sont épuisés, ils recommencent et incrémentent la position vers la gauche. Le chiffre 0 n'est affiché que s'il s'agit du seul symbole de la séquence ou s'il n'est pas le premier.
Si cela vous semble énigmatique, voici ce que je viens de dire en chiffres :
0
1
2
3
4
5
6
7
8
9
10
11
12
13et ainsi de suite.
Chaque fois que le chiffre neuf est incrémenté, il est remis à 0 et la position avant (à gauche) est incrémentée (de 0 à 1). Ensuite, le numéro 9 peut être vu comme 00009 et lorsque nous devons incrémenter 9, nous le réinitialisons à zéro et incrémentons le chiffre juste avant le 9 afin que le nombre devienne 00010. Les zéros non significatifs ne sont pas écrits sauf s'il s'agit du seul chiffre (nombre 0). Et bien sûr, nous écrivons des zéros s'ils apparaissent n'importe où à l'intérieur ou à la fin d'un nombre :
"00010" -> " 0010" -> " 010" -> " 10"
mais non
" 1 ".
C'était assez basique, vous le saviez déjà. Pourquoi l'ai-je dit ? Eh bien, les ordinateurs ne représentent généralement pas des nombres avec 10 chiffres différents. Ils n'utilisent que deux symboles différents, à savoir 0 et 1. Appliquez les mêmes règles à cet ensemble de chiffres et vous obtenez le système de numérotation binaire :
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101et ainsi de suite.
Si vous comptez le nombre de lignes, vous verrez qu'il s'agit à nouveau de 14 nombres différents. Les nombres sont les mêmes et signifient la même chose que dans la première liste, nous avons juste utilisé une représentation différente. Cela signifie que vous devez connaître la représentation utilisée, ou comme on l'appelle le système de numérotation ou la base. Normalement, si nous ne spécifions pas explicitement le système de numérotation utilisé, nous utilisons implicitement le système décimal. Si nous voulons utiliser un autre système de numérotation, nous devrons le préciser. Il existe quelques méthodes largement adoptées pour le faire. Une forme courante consiste à écrire 1010(2), ce qui signifie que vous avez écrit un nombre dans sa représentation binaire. C'est le nombre dix. Si vous écrivez 1010 sans spécifier la base, le nombre est interprété comme mille dix en base 10.
Dans les livres, une autre forme est courante. Il utilise des indices (petits caractères, plus ou moins entre deux lignes). Vous pouvez omettre les parenthèses dans ce cas et écrire le nombre en caractères normaux suivi d'un petit deux juste derrière.
Comme le système de numérotation utilisé est aussi appelé la base, on parle du nombre 1100 base 2, du nombre 12 base 10.
Dans le système binaire, il est courant d'écrire des zéros non significatifs. Les nombres sont écrits par séries de quatre, huit ou seize selon le contexte.
Nous pouvons utiliser la forme binaire lorsque nous parlons à des ordinateurs (...programmation...), mais les nombres auront de grandes représentations. Le nombre 65'535 (souvent dans le système décimal a ' est utilisé pour séparer des blocs de trois chiffres pour la lisibilité) serait écrit comme 111111111111111(2) qui est 16 fois le chiffre 1. Ceci est difficile et sujet aux erreurs. Par conséquent, nous utiliserions généralement une autre base, appelée hexadécimale. Il utilise 16 symboles différents. D'abord les symboles du système décimal sont utilisés, ensuite nous continuons avec les caractères alphabétiques. Nous obtenons 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E et F. Ce système est choisi car la forme hexadécimale peut être convertie en système binaire très facilement (et retour).
Il existe encore un autre système en cours d'utilisation, appelé le système octal. C'était plus courant dans l'ancien temps, mais n'est plus utilisé très souvent. Comme vous pourriez le trouver parfois utilisé, vous devriez vous y habituer et nous le montrerons ci-dessous. C'est la même histoire que pour les autres représentations, mais avec huit symboles différents.
Binary (2)
Octal (8)
Decimal (10)
Hexadecimal (16)
(2) (8) (10) (16)
00000 0 0 0
00001 1 1 1
00010 2 2 2
00011 3 3 3
00100 4 4 4
00101 5 5 5
00110 6 6 6
00111 7 7 7
01000 10 8 8
01001 11 9 9
01010 12 10 A
01011 13 11 B
01100 14 12 C
01101 15 13 D
01110 16 14 E
01111 17 15 F
10000 20 16 10
10001 21 17 11
10010 22 18 12
10011 23 19 13
10100 24 20 14
10101 25 21 15La plupart des ordinateurs utilisés de nos jours utilisent des octets de huit bits. Cela signifie qu'ils stockent huit bits à la fois. Vous pouvez voir pourquoi le système octal n'est pas le plus pratique pour cela : il faudrait trois chiffres pour représenter les huit bits et cela signifie que vous devriez utiliser un chiffre complet pour représenter seulement deux bits (2+3+3 =8). C'est un gaspillage. Pour les chiffres hexadécimaux, vous n'avez besoin que de deux chiffres qui sont utilisés complètement :
(2) (8) (10) (16)
11111111 377 255 FFVous pouvez voir pourquoi le binaire et l'hexadécimal peuvent être convertis rapidement : pour chaque chiffre hexadécimal, il y a exactement quatre chiffres binaires. Prenez un nombre binaire : prenez quatre chiffres à partir de la droite et faites-en un chiffre hexadécimal (voir le tableau ci-dessus). Répétez cette opération jusqu'à ce qu'il n'y ait plus de chiffres. Et inversement : prenez un nombre hexadécimal. Pour chaque chiffre, écrivez son équivalent binaire.
Les ordinateurs (ou plutôt les analyseurs qui y sont exécutés) auraient du mal à convertir un nombre comme 1234(16). Par conséquent, les nombres hexadécimaux sont spécifiés avec un préfixe. Ce préfixe dépend de la langue dans laquelle vous écrivez. Certains des préfixes sont 0x pour C, $pour Pascal, # pour HTML. Il est courant de supposer que si un nombre commence par un zéro, il est octal. Peu importe ce qui est utilisé tant que vous savez ce que c'est. J'utiliserai 0x pour l'hexadécimal, % pour le binaire et 0 pour l'octal. Les nombres suivants sont tous identiques, seule leur représentation (base) est différente : 021 0x11 17 %00010001
Pour faire de l'arithmétique et des conversions, vous devez comprendre encore une chose. C'est quelque chose que vous savez déjà mais peut-être que vous ne le voyez pas encore :
Si vous écrivez 1234, (pas de préfixe, il est donc décimal), vous parlez du nombre mille deux cent trente quatre. En une sorte de formule :
1 * 1000 = 1000
2 * 100 = 200
3 * 10 = 30
4 * 1 = 4
This can also be written as:
1 * 10^3
2 * 10^2
3 * 10^1
4 * 10^0où ^signifie à la puissance de.
Nous utilisons la base 10 et les positions 0,1,2 et 3. La position la plus à droite ne doit PAS être multipliée par 10. La deuxième à partir de la droite doit être multipliée une fois par 10. La troisième à partir de la droite est multipliée avec 10 deux fois. Cela continue pour toutes les positions utilisées.
Il en est de même dans toutes les autres représentations :
0x1234 sera
1 * 16^3
2 * 16^2
3 * 16^1
4 * 16^0
01234 would be
1 * 8^3
2 * 8^2
3 * 8^1
4 * 8^0Cet exemple ne peut pas être fait pour le binaire car ce système n'utilise que deux symboles. Un autre exemple:
%1010 serait
1 * 2^3
0 * 2^2
1 * 2^1
0 * 2^0Il aurait été plus facile de le convertir en sa forme hexadécimale et de simplement traduire %1010 en 0xA. Au bout d'un moment on s'y habitue. Vous n'aurez plus besoin de faire de calculs, mais sachez simplement que 0xA signifie 10.
Pour convertir un nombre décimal en hexadécimal, vous pouvez utiliser la méthode suivante. Il faudra un certain temps pour pouvoir faire les estimations, mais ce sera plus facile si vous utilisez le système plus fréquemment. Nous verrons encore une autre voie par la suite.
Vous devez d'abord savoir combien de positions seront utilisées dans l'autre système. Pour ce faire, vous devez connaître le nombre maximum que vous utiliserez. Eh bien, ce n'est pas aussi difficile qu'il y paraît. En décimal, le nombre maximum que vous pouvez former avec deux chiffres est 99. Le maximum pour trois : 999. Le nombre suivant nécessiterait une position supplémentaire. Inversez cette idée et vous verrez que le nombre peut être trouvé en prenant 10^3 (10*10*10 est 1000) moins 1 ou 10^2 moins un.
Cela peut également être fait pour l'hexadécimal :
16^4 = 0x10000 = 65536
16^3 = 0x1000 = 4096
16^2 = 0x100 = 256
16^1 = 0x10 = 16Si un nombre est inférieur à 65'536, il tiendra dans quatre positions. Si le nombre est supérieur à 4'095, vous devez utiliser la position 4. Le nombre de fois que vous pouvez soustraire 4'096 du nombre sans descendre en dessous de zéro est le premier chiffre que vous écrivez. Ce sera toujours un nombre compris entre 1 et 15 (0x1 à 0xF). Faites de même pour les autres positions.
Essayons avec 41'029. Il est plus petit que 16^4 mais plus grand que 16^3-1. Cela signifie que nous devons utiliser quatre positions. On peut soustraire 16^3 de 41'029 dix fois sans descendre en dessous de zéro. Le chiffre le plus à gauche sera donc A, nous avons donc 0xA ????. Le nombre est réduit à 41'029 - 10*4'096=41'029-40'960=69. 69 est plus petit que 16^3 mais pas plus grand que 16^2-1. Le deuxième chiffre est donc 0 et nous avons maintenant 0xA0 ??. 69 est inférieur à 16^2 et supérieur à 16^1-1. Nous pouvons soustraire 16 ^1 (qui est tout simplement 16) quatre fois et écrire 4 pour obtenir 0xA04?. Soustrayez 64 de 69 (69 - 4*16) et le dernier chiffre est 5 --> 0xA045.
L'autre méthode construit le nombre à partir de la droite. Essayons à nouveau 41'029. Divisez par 16 et n'utilisez pas de fractions (uniquement des nombres entiers).
41029/16 est 2564 avec un reste de 5. Écrivez 5. 2564/16 est 160 avec un reste de 4. Écrivez le 4 avant le 5. 160/16 est 10 sans reste. Préfixez 45 avec 0. 10/16 est inférieur à un. Terminez ici et ajoutez 0xA. Finissez avec 0xA045.
La méthode à utiliser dépend de vous. Utilisez ce qui fonctionne pour vous. Je les utilise tous les deux sans pouvoir dire quelle méthode j'utilise dans chaque cas, cela dépend juste du nombre, je pense. Le fait est que certains nombres apparaîtront fréquemment lors de la programmation. Si le nombre est proche de celui que je connais, alors j'utiliserai la première méthode (comme 32'770 qui est en 32'768 + 2 et je sais juste que c'est 0x8000 + 0x2=0x8002).
Pour le binaire, la même approche peut être utilisée. La base est 2 et non 16, et le nombre de postes va croître rapidement. Utiliser la deuxième méthode a l'avantage de voir très facilement si vous devez écrire un zéro ou un un : si vous divisez par deux le reste sera zéro si c'est un nombre pair et un si c'est un nombre impair :
41029 / 2 = 20514 remainder 1
20514 / 2 = 10257 remainder 0
10257 / 2 = 5128 remainder 1
5128 / 2 = 2564 remainder 0
2564 / 2 = 1282 remainder 0
1282 / 2 = 641 remainder 0
641 / 2 = 320 remainder 1
320 / 2 = 160 remainder 0
160 / 2 = 80 remainder 0
80 / 2 = 40 remainder 0
40 / 2 = 20 remainder 0
20 / 2 = 10 remainder 0
10 / 2 = 5 remainder 0
5 / 2 = 2 remainder 1
2 / 2 = 1 remainder 0
1 / 2 below 0 remainder 1Notez les résultats de droite à gauche : %1010000001000101
Grouper par quatre :
%1010000001000101
%101000000100 0101
%10100000 0100 0101
%1010 0000 0100 0101Convertir en hexadécimal : 0xA045
Regroupez %1010000001000101 par trois et convertissez en octal :
%1010000001000101
%1010000001000 101
%1010000001 000 101
%1010000 001 000 101
%1010 000 001 000 101
%1 010 000 001 000 101
%001 010 000 001 000 101
1 2 0 1 0 5 --> 0120105
So: %1010000001000101 = 0120105 = 0xA045 = 41029
Or: 1010000001000101(2) = 120105(8) = A045(16) = 41029(10)
Or: 1010000001000101(2) = 120105(8) = A045(16) = 41029Au début, lors de l'ajout de nombres, vous les convertirez dans leur forme décimale, puis dans leur forme d'origine après avoir effectué l'addition. Si vous utilisez souvent l'autre système de numération, vous verrez que vous pourrez faire des arithmétiques directement dans la base utilisée. Dans n'importe quelle représentation, c'est la même chose, ajoutez les nombres à droite, notez le chiffre le plus à droite du résultat, rappelez-vous les autres chiffres et utilisez-les au tour suivant. Continuez avec le deuxième chiffre à partir de la droite et ainsi de suite :
%1010 + %0111 --> 10 + 7 --> 17 --> %00010001
va devenir
%1010
%0111 +
||||
|||+-- add 0 + 1, result is 1, nothing to remember
||+--- add 1 + 1, result is %10, write down 0 and remember 1
|+---- add 0 + 1 + 1(remembered), result = 0, remember 1
+----- add 1 + 0 + 1(remembered), result = 0, remember 1
nothing to add, 1 remembered, result = 1
--------
%10001 is the result, I like to write it as %00010001Pour les valeurs faibles, essayez de faire les calculs vous-même, puis vérifiez-les avec une calculatrice. Plus vous ferez les calculs vous-même, plus vous constaterez que vous n'avez pas fait d'erreurs. Au final, vous ferez des calculs dans d'autres bases aussi facilement qu'en décimal.
Lorsque les chiffres augmenteront, vous devrez réaliser qu'un ordinateur ne s'appelle pas un ordinateur juste pour avoir un joli nom. Il existe de nombreuses calculatrices différentes, utilisez-les. Pour Unix, vous pouvez utiliser bc qui est l'abréviation de Binary Calculator. Il calcule non seulement en décimal, mais dans toutes les bases que vous voudrez utiliser (parmi elles binaires).
Pour les personnes sous Windows : Lancez la calculatrice (démarrer->programmes->accessoires->calculatrice) et si besoin cliquez sur afficher->scientifique. Vous avez maintenant une calculatrice scientifique et pouvez calculer en binaire ou en hexadécimal.
J'espère que vous avez apprécié les exemples et leurs descriptions. Si c'est le cas, aidez les autres en les dirigeant vers ce document lorsqu'ils posent des questions de base. Non seulement ils obtiendront leur réponse, mais en même temps ils en apprendront beaucoup plus.
Alex van den Bogaerdt alex@vandenbogaerdt.nl