# Numération binaire
*Il y a 10 sortes de gens, celles qui comprennent le binaire et les autres*
---
## Les bases
---
### Plusieurs écritures
Les nombres $14$, $\sqrt{196}$, $\frac{28}{2}$, $1110_b$, `0x0E` sont identiques. Seule l'écriture diffère.
L'écriture a son importance : certaines sont plus pratiques que d'autres.
---
### Base 10 : décimal
Numération pour les humains, utilisant dix symboles 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
---
### Base 2 : binaire
Numération pour l'ordinateur, utilisant les deux symboles 0, 1.
> Physiquement, il n'y a pas de 1 et de 0 dans l'ordinateur. Seulement des éléments chargés/déchargés, ON/OFF, etc.
---
### Base 16 : hexadécimal
Façon commode, pour l'humain, d'abréger l'écriture binaire. Utlise les seize symboles 0, 1, ..., 9, A, B, ..., F.
Il faudra vous rappeler que A = 11, B = 12, ..., F = 15
---
### Notations
* On otera par un **b** un nombre en binaire : $100111_b$ ou `0b100111`
* On otera par un **x** un nombre en hexadécimal : $A43B_x$ ou `0xA43B`
---
## Compter dans une base quelconque
La notation de position que l'on utilise consiste à regrouper ce que l'on compte dans des paquets de tailles déterminées.
---
### Base 10

---
### Base 4
> Simple exemple, la base 4 n'a aucun intérêt.

---
Une même quantité peut être empaquetée avec la base 10 et avec la base 4.

$213 = 3111_4$
---
Quand on écrit 213, c'est implicitement en base 10.

$3111_4 = 3\times 4^3 + 1\times 4^2 + 1\times 4 + 1 = 213$
---
Le calcul qui précède permet d'aller de la base 4 à la base 10. En effet, nous avons fait nos calculs en base 10 sans même y penser et le résultat 213 est donc en base 10.
---
## Convertir vers la base 10
---
### Binaire vers décimal

---
### Hexadécimal vers décimal

---
### Python
La conversion est directe en Python :
```python
>>> 0b101001
41
>>> 0x2B3
691
```
---
## Convertir depuis la base 10
Méthode des divisions successives
> Exemple au tableau...
---
## Formatage python
Python intègre toutes les fonctionnalités pour afficher les nombres comme on le veut. On peut utiliser une **fstring**, une chaîne formatée.
```python
>>> x = 497
>>> "nombre {x}"
'nombre {x}'
>>> f"nombre {x}"
'nombre 497'
>>> f"nombre {x:b}"
'nombre 111110001'
```
---
## Conversion binaire - hexadécimal
Le seul intérêt de l'hexa est qu'il résume **sans calcul** l'écriture binaire. Il ne faut donc pas faire de calculs !

---
## Mots binaires
bit = binary element : un chiffre binaire, 0 ou 1
On regroupe les bits pour former des mots binaires (on assemble des chiffres pour faire des nombres).
---
#### octet = Byte
Des choix technologies ont fait que la taille de 8 bits revient toujours.
8 bits = 1 octet = 1 Byte.
Par ex, en Python, un `int` occupe 4 octets.
---
#### Unités de mémoire
Bien que dans le commerce, ces unités ne sont pas toujours respectées, elles existent...
* 1 ko = 1 kilo octet = 1000 octets
* 1 kio = 1 kibi octet = 1024 octets
* 1 Mo = 1 Méga octet = 1000 x 1000 octets
* 1 Mio = 1 Mébi octet = 1024 x 1024 octets