Ajoute le cours de numération

This commit is contained in:
Alexis Fourmaux 2025-07-28 15:10:20 +02:00
parent 19c2f22bf5
commit 9a654fdcad
4 changed files with 452 additions and 0 deletions

View file

@ -0,0 +1,187 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0" version="28.0.7">
<diagram name="Page-1" id="1AVjjWDgrq6R2f-kfSwq">
<mxGraphModel dx="1107" dy="796" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="qiqclTdI7QCVarI5UXRn-11" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="340" y="340" width="84" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-10" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-11">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-3" value="" style="group" vertex="1" connectable="0" parent="qiqclTdI7QCVarI5UXRn-11">
<mxGeometry x="34" width="50" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-1" value="" style="line;strokeWidth=2;direction=south;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-3">
<mxGeometry width="7.142857142857143" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-2" value="" style="line;strokeWidth=2;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-3">
<mxGeometry x="2.857142857142857" y="25" width="47.142857142857146" height="6.25" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-5" value="&lt;div&gt;2&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-3">
<mxGeometry x="11.430000000000007" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-6" value="&lt;div&gt;26&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-3">
<mxGeometry x="7.139999999999986" y="35" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-4" value="&lt;div&gt;53&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-11">
<mxGeometry y="2" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-7" value="&lt;div&gt;-52&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-11">
<mxGeometry y="22" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-8" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-11">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-9" value="" style="line;strokeWidth=2;html=1;strokeColor=light-dark(#000000,#E6D0DE);" vertex="1" parent="qiqclTdI7QCVarI5UXRn-11">
<mxGeometry x="4" y="42" width="30" height="10" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-12" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="390" y="380" width="84" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-13" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-12">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-14" value="" style="group" vertex="1" connectable="0" parent="qiqclTdI7QCVarI5UXRn-12">
<mxGeometry x="34" width="50" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-15" value="" style="line;strokeWidth=2;direction=south;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-14">
<mxGeometry width="7.142857142857143" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-16" value="" style="line;strokeWidth=2;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-14">
<mxGeometry x="2.857142857142857" y="25" width="47.142857142857146" height="6.25" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-17" value="&lt;div&gt;2&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-14">
<mxGeometry x="11.430000000000007" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-18" value="13" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-14">
<mxGeometry x="7.139999999999986" y="35" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-21" value="0" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-12">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-25" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="436" y="420" width="84" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-26" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-25">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-27" value="" style="group" vertex="1" connectable="0" parent="qiqclTdI7QCVarI5UXRn-25">
<mxGeometry x="34" width="50" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-28" value="" style="line;strokeWidth=2;direction=south;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-27">
<mxGeometry width="7.142857142857143" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-29" value="" style="line;strokeWidth=2;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-27">
<mxGeometry x="2.857142857142857" y="25" width="47.142857142857146" height="6.25" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-30" value="&lt;div&gt;2&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-27">
<mxGeometry x="11.430000000000007" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-31" value="6" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-27">
<mxGeometry x="12.139999999999986" y="35" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-32" value="&lt;div&gt;1&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-25">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-33" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="480" y="460" width="84" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-34" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-33">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-35" value="" style="group" vertex="1" connectable="0" parent="qiqclTdI7QCVarI5UXRn-33">
<mxGeometry x="34" width="50" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-36" value="" style="line;strokeWidth=2;direction=south;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-35">
<mxGeometry width="7.142857142857143" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-37" value="" style="line;strokeWidth=2;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-35">
<mxGeometry x="2.857142857142857" y="25" width="47.142857142857146" height="6.25" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-38" value="&lt;div&gt;2&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-35">
<mxGeometry x="11.430000000000007" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-39" value="&lt;div&gt;3&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-35">
<mxGeometry x="12.139999999999986" y="35" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-40" value="0" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-33">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-41" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="520" y="500" width="84" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-42" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-41">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-43" value="" style="group" vertex="1" connectable="0" parent="qiqclTdI7QCVarI5UXRn-41">
<mxGeometry x="34" width="50" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-44" value="" style="line;strokeWidth=2;direction=south;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-43">
<mxGeometry width="7.142857142857143" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-45" value="" style="line;strokeWidth=2;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-43">
<mxGeometry x="2.857142857142857" y="25" width="47.142857142857146" height="6.25" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-46" value="&lt;div&gt;2&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-43">
<mxGeometry x="11.430000000000007" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-47" value="&lt;div&gt;1&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-43">
<mxGeometry x="12.139999999999986" y="35" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-48" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-41">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-49" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="564" y="535" width="84" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-50" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-49">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-51" value="" style="group" vertex="1" connectable="0" parent="qiqclTdI7QCVarI5UXRn-49">
<mxGeometry x="34" width="50" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-52" value="" style="line;strokeWidth=2;direction=south;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-51">
<mxGeometry width="7.142857142857143" height="100" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-53" value="" style="line;strokeWidth=2;html=1;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-51">
<mxGeometry x="2.857142857142857" y="25" width="47.142857142857146" height="6.25" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-54" value="&lt;div&gt;2&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-51">
<mxGeometry x="11.430000000000007" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-55" value="&lt;div&gt;0&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-51">
<mxGeometry x="12.139999999999986" y="35" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-56" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="qiqclTdI7QCVarI5UXRn-49">
<mxGeometry x="4" y="52" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-68" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="570" y="640" as="sourcePoint" />
<mxPoint x="320" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-69" value="&lt;div&gt;LSB / Poids faible&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="250" y="430" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-70" value="MSB / Poids fort" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="520" y="660" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-71" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="390" y="310" as="sourcePoint" />
<mxPoint x="660" y="540" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-72" value="Sens des calculs" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="530" y="375" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="qiqclTdI7QCVarI5UXRn-73" value="Sens de lecture du résultat" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="364" y="540" width="60" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 123 KiB

View file

@ -0,0 +1,260 @@
# Codage des entiers naturels
## Base 10 et généralisation
Les nombres peuvent avoir plein de représentations différentes, selon les contextes. En informatique, on va en utiliser 4 :
- Décimal (base 10)
- Binaire (base 2)
- Hexadécimal (Base 16)
- Octal (base 8)
On écrit les nombres avec une succession de symboles, les chiffres, qui représentent une valeur.
On utilise un système positionnel, c'est à dire que la valeur du symbole diffère selon sa position dans le nombre. Ex.
- le nombre 222 : le 2 le plus à gauche (celui des centaines) vaut 10 fois plus que celui du milieu (celui des dizaines), qui vaut lui même 10 fois plus que celui de droite (celui des unités). Et pourtant il s'agit toujours d'un 2, le même symbole.
La position dans le nombre s'appelle le **rang** et sa valeur s'appelle le **poids**. Plus le rang est élevé, plus le poids est élevé.
En base 10, le poids d'un nombre est multiplié par 10 à chaque fois qu'on monte d'un rang :
- Si le nombre est placé tout à droite, en première position, au niveau des unités, son poids sera la valeur du chiffre multiplié par 1 (ou 10⁰)
- Si le nombre est placé au niveau des dizaines, en seconde position, son poids sera 10 fois plus élevé : on multipliera le chiffre par 10 (ou 10¹)
- Si le nombre est placé au niveau des centaines, en troisième position, son poids sera encore 10 fois lus élevé (et 100 fois plus élevé que pour les unités) : on multipliera le chiffre par 100 (ou 10²).
- On peut ainsi extrapoler avec les milliers, les dizaines de milliers etc.
Donc un nombre représenté en base 10 pourra correspondre à la formule suivante (où les $a_i$ sont les chiffres de rang $i$) :
$$ a_n \times 10^n + ... + a_2 \times 10^2 + a_1 \times 10^1 + a_0 \times 10^0 $$
Le même principe s'applique aux autres bases. On peut généraliser la formule, pour une base $b$:
$$ a_n \times b^n + ... + a_2 \times b^2 + a_1 \times b^1 + a_0 \times b^0 $$
Les $a_i$ diffèrent selon les bases :
- en base 10, on utilise les chiffres de 0 à 9
- en base 2, on utilise les chiffres de 0 à 1
- en base 16, on utilise les chiffres de 0 à F (on utilisera des lettres pour les "chiffres" au delà de 9)
Par exemple :
- $48_{|10}$ pour 48 en base 10 : $4\times10^1+8\times10^0$
- $56_{|16}$ pour 86 en base 16 : $5\times16^1+6\times16^0$
- $1011_{|2}$ pour 11 en base 2 : $1\times2^3+0\times2^2+1\times2^1+1\times2^0$
Remarquez que nous avons écrit la base avec le symbole | pour éviter les confusions
```admonish warning title='Attention'
La plus petite puissance (celle des unités en base 10) est de 0 (10⁰ = 1) et non pas de 1 (10¹ = 10)
```
Maintenant que nous avons vu comment fonctionnent les bases dans le cas général, nous allons parler des systèmes binaires et hexadécimal utilisés en informatique.
## La base 2, système binaire
Le système binaire est très utilisé en informatique. Il sert notamment en réseaux, et c'est là que nous l'utiliserons, mais également dans l'informatique dite bas niveau, c'est à dire proche de l'électronique.
Dans le système binaire, chaque symbole représente une puissance de 2. Comme il n'y en a que 2 nécessaires, on utilise le 0 et le 1.
Exemples:
- $11_{|2} = 1\times2^1+1\times2^0 = 3_{|10}$
- $101_{|2} = 1\times2^3+0\times2^2+1\times2^1+1\times2^0 = 5_{|10}$
Chaque symbole est appelé un **bit** (**Bi**nary dig**it*) pour les distinguer des chiffres du système décimal.
On regroupe souvent les bits en paquets de 8 que l'on va appeler **octets** (bytes en anglais).
### MSB et LSB
Dans un nombre binaire on se réfère souvent aux bits situés aux extrémités:
- On parlera de **MSB** (*Most Significant Bit*) ou **bits de poids fort** pour les bits les plus à gauche (dont le **poids/rang** est plus élevé)
- On parlera de **LSB** (*Least Significant Bit*) ou **bits de poids faible** pour les bits les plus à droite (dont le **poids/rang** est plus bas)
Par exemple pour le nombre $1001_{|2}$ :
|1|0|0|1|
|-|-|-|-|
|MSB|||LSB|
### Multiples d'octets
Pour parler des capacités de supports de stockage ou de la mémoire vive on parle en multiples d'octets. Il existe deux systèmes.
1. Celui qui correspond à des puissances de 10
- le kilooctet (ko) = 10³ octets = 1000 octets
- le mégaoctet (Mo) = 10⁶ octets (million) = 1000 ko
- le gigaoctet (Go) = 10⁹ octets (milliard) = 1000 Mo = 10⁶ ko
- le téraoctet (To) = 10¹² octets (billion) = 1000 Go = 10⁶ Mo = 10⁹ ko
- le pétatoctet (Po) = 10¹⁵ octets (billiard) = 1000 To = 10⁶ Go = 10⁹ Mo = 10¹² ko
2. Celui qui correspond à des puissances de 2
- le kibioctet (Kio) = 2¹⁰ octets = 1024 octets
- le mébioctet (Mio) = 2²⁰ octets = 1024 Kio
- le gibioctet (Gio) = 2³⁰ octets = 1024 Mio
- le tébioctet (Tio) = 2⁴⁰ octets = 1024 Gio
## La base 16, système hexadécimal
Le système hexadécimal est également très utilisé :
- Les adresses MAC en réseau, ou les adresses IPv6
- Les couleurs dans la plupart des logiciels de dessin ou de retouche photo
- Les valeurs binaires dans de nombreux langages de programmation
Sur le même modèle que précédemment, les valeurs des symboles utilisés sont des puissances de 16. Dans ce système, on utilise les 10 chiffres du systèmes décimal (de 0 à 9), suivis des premières lettres de l'alphabet latin (de A à F pour les valeurs de 10 à 15).
- $\mathrm{3B} = 3_{|10}\times16^1 + 11_{|10}\times16^0 = 59_{|10}$
- $\mathrm{1CF} = 1_{|10}\times16^2 + 12_{|10}\times16^1 + 15_{|10}\times16^0 = 463_{|10}$
La convention pour écrire des nombres hexadécimaux est de les précéder par `0x` : `0x1CF`.
Cette écriture fonctionne en Python, qui interprètera votre valeur comme codée en hexadécimal si vous l'écrivez avec `0x`.
## Conversions
Dans de nombreux cas il sera nécessaire de pouvoir convertir les nombres d'une base à l'autre. Nous l'utiliserons souvent en réseau, mais également en informatique bas niveau (embarquée).
### Binaire - Décimal
#### Décimal vers binaire
##### Méthode des soustractions successives
La première méthode nécessite de connaître les puissances de 2 par coeur. Elle est simple et rapide pour les petits nombres (en fait pour les nombres plus petits que les puissances de deux que vous connaissez par coeur). Vous trouverez en annexe une table avec les puissances de 2 les plus courantes.
Procédez de cette manière :
1. Vous pouvez créer un tableau avec les puissances de 2
1. En parcourant votre tableau de gauche à droite (du plus grand au plus petit)
- placez un 0 si le nombre de la colonne est supérieur ou égal à votre nombre
- placez un 1 dans la première colonne dont la valeur est inférieure à votre nombre
1. Soustrayez la puissance de 2 à votre nombre et recommencez avec le résultat
1. Procédez comme ça jusqu'à ce que votre tableau soit rempli
1. Votre nombre binaire sera écrit dans les cases de votre tableau
Exemple: $137_{|10} = 10001001_{|2}$
|128|64|32|16|8|4|2|1|
|---|--|--|--|-|-|-|-|
|1 |0 | 0| 0|1|0|0|1|
1. 137 est supérieur à 128 : on met 1 dans la colonne 128
2. 137 - 128 = 9
3. 9 est supérieur à 8 mais inférieur à 16, 32, 64 donc on met 0 dans ces colonnes, et 1 sous la colonne 8
4. 9 - 8 = 1
5. 1 est inférieur à 4 et 2 donc on y met 0. On met 1 dans la colonne 1.
6. Nous avons rempli toutes nos colonnes : on peut lire notre nombre dans le tableau, de gauche à droite : $10001001_{|2}$
```admonish tip title='Astuce'
Pour savoir jusqu'où devrait aller votre tableau, vous devez savoir quelle sera la plus grande puissance de 2 impliquée. Pour cela :
- soit vous connaissez vos puissances de 2 par coeur
- soit vous pouvez prendre la **partie entière** de $log(N)/log(2)$ où $N$ est votre nombre.
- Si votre calculatrice possède la fonction $log_2$ vous pouvez prendre la partie entière de $log_2(N)$
Exemple avec 2367 : $log(2367)/log(2) = 11,208$ donc votre tableau ira jusqu'à 2¹¹ soit 2048
```
##### Méthode des divisions successives
Pour les nombres plus grands, le tableau risque de devenir très grand et pénible à utiliser. Il existe une autre méthode, qu'on appelle les divisions successives.
Pour cela il faut effectuer une série de divisions euclidiennes par 2 (c'est à dire la division entière comme en primaire, où on calcule le reste et le quotient).
La méthode:
1. Prenez votre nombre, divisez le par 2. Vous obtiendrez un reste de 0 ou 1. Notez le.
2. Divisiez ensuite de nouveau le quotient de votre première division par deux. Notez le reste.
3. Procédez de cette manière jusqu'à avoir un quotient de 0
4. Pour trouver votre nombre binaire, prenez le reste de chacune de vos divisions dans l'ordre **inverse** de vos calculs. Le dernier reste trouvé sera votre bit de poids fort (MSB) et le premier reste calculé votre bit de poids faible (LSB)
Exemple avec le nombre $53_{|10}$ qui s'écrit $110101_{|2}$ en binaire :
![divisions successives](./divisions_successives.svg)
#### Binaire vers décimal
Pour calculer le nombre décimal à partir du nombre binaire, il suffit de prendre la formule de la première partie appliquée à une base 2 : prenez chaque bit à 1 et multipliez-le par son poids.
```admonish warning title='Attention'
Le bit de poids faible a une puissance de 0 (2⁰ = 1) et non pas de 1 (2¹ = 2)
```
Ainsi pour $110101_{|2}$, cela revient à faire :
|Bits|1|1|0|1|0|1|
|-|-|-|-|-|-|-|
|Puissance|5|4|3|2|1|0|
|Valeur|32|16|8|4|2|1|
Et donc :
$$1\times2^5 + 1\times2^4 + 0\times2^3 + 1\times2^2 + 0\times2^1 + 1\times2^0 = 32 + 16 + 4 + 1 = 53$$
### Binaire vers Hexadécimal
Pour convertir un nombre binaire en hexadécimal, c'est plus simple. Un nombre hexadécimal est facile à représenter avec 4 bits ($1111_{|2} = 15_{|10} = \mathrm{F}_{|16}$).
Pour convertir un nombre binaire en hexadécimal, il suffit donc de regrouper les bits par groupes de 4, et de remplacer chaque groupe de 4 par sa représentation hexadécimale, comme dans le tableau ci-dessous.
Si votre nombre ne contient pas assez de bits pour faire un groupe de 4, rajoutez des 0 au poids fort pour avoir assez.
|Décimal | Hexadécimal | Binaire|
|--------|-------------|--------|
|0|0|0000|
|1|1|0001
|2|2|0010
|3|3|0011
|4|4|0100
|5|5|0101
|6|6|0110
|7|7|0111
|8|8|1000
|9|9|1001
|10|A|1010
|11|B|1011
|12|C|1100
|13|D|1101
|14|E|1110
|15|F|1111
Exemple avec $110101_{|2}$:
1. On n'a que 6 bits, il faut donc rajouter deux zéros à gauche pour faire deux paquets de 4.
$$\overbrace{00}^{\text{ajout}}110101$$
2. Ensuite on regroupe nos bits en paquets de 4 et on regarde la correspondance dans la table (ou on l'apprend par coeur)
$$\overbrace{0011}^{3_{|16}}\overbrace{0101}^{5_{|16}}$$
3. Cela nous donne alors $110101_{|2} = 35_{|16}$
### Hexadécimal vers binaire
Pour convertir un nombre hexadécimal vers binaire, il faut faire exactement pareil, en remplaçant la représentation hexadécimale du nombre par sa représentation binaire.
Ex: $\mathrm{6B}_{|16} = {\overbrace{0110}^{6_{|16}}\overbrace{1011}^{\mathrm{B}_{|16}}}_{|2}$
## Annexes
### Tableau des puissances de 2
|Puissance|Valeur|
|---------|------|
|0|1|
|1|2|
|2|4|
|3|8|
|4|16|
|5|32|
|6|64|
|7|127|
|8|256|
|9|512|
|10|1024|
|11|2048|
|12|4096|
|13|8192|
### Un petit peu d'anglais
|Français|Anglais|
|--------|-------|
|décimal|decimal|
|binaire|binary|
|hexadécimal|hexadecimal|
|octal|octal|
|chiffre|digit|
|rang|place|
|poids|weight|
|octet|byte|
|bit de poids fort|most significant bit (MSB)|
|bit de poids faible|least significant bit (LSB)|

View file

@ -4,6 +4,7 @@
- [TP1 - Découverte de Python](./CIEL1/01-bases-python/tp/01_decouverte.md)
- [TP1 - Corrigé - Découverte de Python](./CIEL1/01-bases-python/tp/_01_decouverte.md)
- [L'adressage IP](./CIEL1/02-reseau/adressage-ip.md)
- [Représentation des nombres](./CIEL1/02-reseau/numeration.md)
- [L'environnement de développement](./CIEL1/03-dev-env/dev-env.md)
- [Les conteneurs](./CIEL1/03-dev-env/conteneurs.md)
- [Git](./CIEL1/03-dev-env/git.md)