# 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 ![paquets de 10](./medias/numeration/paquets_de_10.svg) --- ### Base 4 > Simple exemple, la base 4 n'a aucun intérêt. ![paquets de 4](./medias/numeration/paquets_de_4.svg) --- Une même quantité peut être empaquetée avec la base 10 et avec la base 4. ![paquets de 4](./medias/numeration/paquets.svg) $213 = 3111_4$ --- Quand on écrit 213, c'est implicitement en base 10. ![décomposition](./medias/numeration/paquets_decomp.svg) $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 ![conversion binaire à décimal](./medias/numeration/conv_2_10.svg) --- ### Hexadécimal vers décimal ![conversion hexadécimal à décimal](./medias/numeration/conv_16_10.svg) --- ### 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 ! ![conversion hexadécimal à décimal](./medias/numeration/conv_16_2.svg) --- ## 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