Cours/TD Binaire
I. Préambule (à méditer)⚓︎
1. Entiers et flottants⚓︎
Pourquoi fait-on la différence en Python entre integer et float?
Regardons deux exemples :
🌵 Résoudre l'équation \(x+1=x\)
Tester en console
Dans la console saisir à la main sans "copier/coller" :
Il y a là quelques chose à comprendre non ?
Mais ça va prendre quelques … minutes...
🌵 Dans la console de Python d'un éditeur Python (EduPython, Thonny ou autre)' tester 2023**2023
, puis 2023.0**2023
⚠️ Ne pas utiliser un éditeur en ligne comme basthon, ou le bac à sable de ce site.
A savoir
👉 2023 est de type entier, 2023.0 est de type flottant
Nous allons commencer par étudier les entiers puis nous comprendrons ces différences de comportements.
2. Les différentes bases⚓︎
Regarder sur ce site : 🌐 Les couleurs , comment sont codées les couleurs en html (pour les sites web).
II. La numération des shadoks⚓︎
Les Shadocs
En quelle base comptent les shadoks ?
Solution
En base 4 !
III. Prérequis sur les puissances⚓︎
QCM à refaire tant que nécessaire ...
-
Compléter : \(2^3=\)
- 9
- 8
- Je ne sais pas
- 6
-
Compléter : \(3^2=\)
- 9
- 8
- Je ne sais pas
- 6
-
Compléter : \(2^0=\)
- 0
- 1
- Impossible
- 2
-
Compléter : \(2^1=\)
- 0
- 1
- Je ne sais pas
- 2
-
Compléter : \(0^3=\)
- 0
- 1
- Impossible
- 3
-
Compléter : \(16^3 \times 16^2=\)
- \(16^5\)
- \(16^6\)
- Je ne sais pas
- 2
-
Compléter : \(16^0\times 16^2=\)
- \(16^0\)
- \(16^2\)
- Je ne sais pas
- 16
- 1
-
Compléter : \(2^3+2^4=\)
- \(2^7\)
- \(2^{12}\)
- Je ne sais pas
- 24
IV. Les bases numériques⚓︎
1. un peu d'histoire⚓︎
Le mot calcul trouve son origine dans le mot latin « calculis » qui signifie « caillou ». Il y a des millénaires, il était coutume d’utiliser des cailloux pour représenter un nombre ; pour dénombrer, compter.
Les représentations écrites d’un nombre sont multiples ; elles varient selon les cultures. On distingue principalement 2 types d’écritures :
Celles à base de symboles qu’il faut additionner (et parfois soustraire) entre eux
Par exemple :
🌴 La numération mésopotamienne, 3000 ans av J.C. :
Source de l'image : 🌐 wikipedia
🌴 La numération romaine : MMXXIII = 2023
Celles à base de rang (ou de position)
C’est celle que nous utilisons actuellement tous les jours :
\(2023 = 2 \times 1000 + 0 \times 100 + 2 \times 10 + 3 \times 1\).
Ou encore : 2023 est égal à 2 milliers, 0 centaines, 2 dizaines, 3 unités.
Différentes bases
👉 Ces représentations utilisent des bases. Pour la numération mésopotamienne c’est une base 60. C’est aussi le cas pour les heures : nous utilisons une base de 60 car 1 min = 60 s et 1 h= 60 min
👉 Actuellement, c’est la base 10 qui est utilisée (nous avons 10 doigts !).
👉 Les machines à calculer électronique ne connaissent pas (de manière « naturelle ») le système numérique en base 10. Elles ne savent dénombrer que 2 éléments : 0 et 1. la base utilisée est donc la base 2, on parle aussi de "binaire".
😊 Pour pouvoir les utiliser nous devons donc savoir passer d’une base à une autre.
👉 Nous allons voir qu’il existe un principe général et utiliserons régulièrement les bases 2,10 et 16.
2. 💡 Le principe⚓︎
Quelle que soit la façon de l'écrire, et quelle que soit l'opération que l'on fait, on ne fait au fond que toujours une seule et même chose : compter les unités, les dizaines , les centaines etc...
\(123\) c'est en fait \(1\) centaine + \(2\) dizaines + \(3\) unites
Mais les mots cachent une réalité encore plus simple, c'est \(1 \times 10^2 + 2 \times 10^1 + 3 \times 10^0\)
Mieux encore ! Supposons que nous comptions en base 5 :
Nombre en base 10 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Nombre en base 5 | 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 |
\((21)_5 = 2 \times 5^1 + 1 \times 5^0 = (11)_{10}\)
Et on n'a même pas besoin de connaître les tables de multiplication, juste savoir compter et poser des retenues. La multiplication européenne, plus compacte, demande quand à elle la connaissance des tables jusqu'à \(10\).
Au delà... on ne fait finalement qu'additionner les unités, les dizaines (ou « cinquaines » etc...)
Base 12 ? base 60 ?
Et ou trouve-t-on encore de nos jours, couramment, des comptes en base 12 ? en base 60 ?
Solution
- Pour la base 12 : les heures
- Pour la base 60 : les minutes
3. Lire un nombre⚓︎
un exemple en base 10
\(12734 = 4 \times 10^0 + 3 \times 10^1 + 7 \times 10^2 + 2 \times 10^3 + 1 \times 10^4\)
un exemple en base 2
\((101010)_2 = 0 \times 2^0 + 1 \times 2^1 + 0 \times 2^2 + 1 \times 2^3 + 0 \times 2^4 + 1 \times 2^5 = 0 + 2 + 0+ 8 + 0 + 32 = (42)_{10}\)
Alors en base 5 ? C'est pareil !
\((12334)_5 = 4 \times 5^0 + 3 \times 5^1 + 3 \times 5^2 + 2 \times 5^3 + 1 \times 5^4 = 4 + 15 + 75 + 250 + 625 = (969)_{10}\)
😊 Pas si difficile ! Vous avez appris à convertir un nombre d'une base N vers la base 10.
Notations
Pour préciser dans quelle base sont écrits les nombres, on peut utiliser des parenthèses :
\((42)_{10}=(101010)_2\)
Autres notations possibles :\((101010)_2 = 101010 _{(2)}= 0\text{b}101010 = 101010\text{b}\)
4. Compter en binaire⚓︎
Quelques exemples
\((1)_2+(1)_2=(2^0 + 2^0)_{10}=(2 \times 2^0)_{10} =(2^1)_{10}= (10)_2\)
\((10)_2 +(1)_2=(2^1+2^0)_{10}=(11)_2\)
\((11)_2+(1)_2= (2^1+2^0+2^0)_{10}= (2^1+2 \times 2^0)_{10}= (2^1+2^1)_{10}=(2 \times 2^1)_{10}=(2^2)_{10}=(100)_2\)
Comptons en base 2
Compter, c'est ... ajouter 1 😊
0; 1; 10; 11; 100; 101; 110; ...
Si on comptait ?
Trouver les entiers qui suivent ceux-ci lorsque l'on compte : 0; 1; 10; 11; 100; 101; 110;
Solution
111; 1000; 1001; 1010; 1011; 1100; 1101; 1110; 1111; 10000; 10001; 10010 ...
Remarquer en décimal
- 99 + 1 = 100
- 999 + 1 = 1000
- 9999 + 1 = 10000 …
5. De la base 10 vers la base 2⚓︎
Poser les divisions à la main
Petit retour sur les divisions dites "euclidiennes"
Source de l'image : 🌐 Division euclidienne
Méthode par divisions successives
🤔 Etudier l'exemple ci-dessous
👉 On poursuit les divisions jusqu'à obtenir un quotient égal à 0 pour la dernière division.
On lit ensuite les restes, en partant du bas.
Source de l'image : 🌐 Académie de Limoges
V. Exercices⚓︎
Exercice 1
1110010 est écrit en base 2. L'écrire en base 10.
Solution
\((1110010)_2 = 0 \times 2^0 + 1 \times 2^1 + 0 \times 2^2 + 0 \times 2^3 + 1\times 2^4 + 1 \times 2^5 + 1 \times 2^6 = 2 + 16 + 32 + 64 = (114)_{10}\)
1110010 en binaire s'écrit 114 en décimal.
Exercice 2
convertir 23 écrit en décimal en binaire
Solution
10111
Exercice 3
234 est écrit en base 10. L'écrire en binaire
Solution
Le nombre 234 écrit en base dix, s'écrit 11101010 en base deux .
Exercice 4
On peut aussi convertir un nombre décimal en binaire en utilisant un tableau.
Exercice 5 : A vous de jouer !
Imaginez vos propres exercices, et vérifiez la réponse ci-dessous.
VI. Les instructions Python⚓︎
Tester en console
Dans la console saisir à la main sans "copier/coller" :
- "101010" est de type str. 2 est la base dans lequel il est écrit. On obtient une conversion de ce nombre en décimal.
Types
Quels sont les types de
bin(42)
int(0b101010)
int("101010", 2)
Solution
En utilisant la fonction type
on obtient :
VII. Des opérations en binaire⚓︎
1. Les additions⚓︎
Rappel en décimal
Exemples en binaire
\(1100110_2+1111101_2 = ?\)
\(1111111_2+1_2 = ?\)
On a donc \(1111111_2+1_2 = 100000000_2\)
👉 C'est important à remarquer, et cela se généralise évidemment pour tous les nombres constitués uniquement de 1 auxquels on ajoute 1.
2. Les multiplications⚓︎
Multiplier par 10 en décimal
En base 10 , multiplier par 10 c'est ajouter un 0 à la fin : \(134 \times 10 = 1340\)
C'est facile à comprendre :
\(134 \times 10 =(1 \times 10^2 + 3 \times10^1 + 4 \times 10^0) \times 10\)
\(=(1 \times 10^3 + 3 \times10^2 + 4 \times 10^1+0 \times 10^0)\)
Ce résultat s'écrit bien \((1340)_{10}\)
Multiplier par 2 en binaire
Multiplier par 2 en binaire se fait de façon analogue à multiplier par 10 en décimal : il suffit d'ajouter un 0 à la fin.
C'est facile à comprendre :
\((1011)_2 \times (2)_{10}\)
\(= (1 \times 2^3 + 0 \times2^2 + 1 \times 2^1+1 \times 2^0)_{10} \times (2)_{10}\)
\(=(1 \times 2^4 + 0 \times2^3 + 1 \times 2^2+1 \times 2^1+0 \times 2^0)_{10}\)
Ce résultat s'écrit bien \((10110)_{2}\)
Remarque
\((1011)_2 \times (2)_{10}=(1011)_2 \times (10)_2\)
On peut poser l'opération de façon analogue à ce que l'on fait en décimal :
\(\begin{array}{*{20}{c}} {}&1&0&1&1\\ \times &{}&{}&1&0\\ \hline {}&0&0&0&0\\ 1&0&1&1&{}\\ \hline 1&0&1&1&0 \end{array}\)
😊 C'est facile à comprendre :
\((1011)_2 \times (2)_{10}= (1 \times 2^3 + 0 \times2^2 + 1 \times 2^1+1 \times 2^0)_{10} \times (2)_{10}\)
\(=(1 \times 2^4 + 0 \times2^3 + 1 \times 2^2+1 \times 2^1+0 \times 2^0)_{10}\)
Ce résultat s'écrit bien \((10110)_{2}\)
💚 A noter
Quand on multiplie en binaire par 2 on écrit un 0 à la droite du nombre, comme pour la multiplication par 10 en décimal.
VIII. Les bits et les octets⚓︎
Les bits
Le bit est l'unité élémentaire d'information : 0 ou 1.
Avec un seul bit on peut donc faire 2 "mots"
- 0
- 1
Avec 2 bits on pourra faire 4 "mots":
- 00
- 01
- 10
- 11
Avec 3 bits on pourra faire 8 "mots":
- 000
- 001
- 010
- 011
- 100
- 101
- 110
- 111
Et ainsi de suite, à chaque fois qu'on ajoute un bit, on multiplie par deux le nombre de "mots" possibles.
Exercice 1
Pour coder tous les nombres entiers de 1 à 1000, combien de bits faut-il ?
Solution
\((1000)_{10}=(1111101000)_2\)
Il faut donc 10 bits.
Les octets
Dans la mémoire de l'ordinateur les informations sont codées dans des octets. C'est la plus petite unité d'information qu'on peut lire/écrire. Un octet correspond à 8 bits.
👉 Un octet permet donc de coder \(2^8=256\) valeurs différentes.
Les pixels dans les images
En SNT vous avez appris que les couleurs sont codée avec 3 nombres allant de 0 à 255.
🌵 Notez bien qu'il y a bien 256 valeurs différentes entre 0 et 255
Autrement dit, chacun de ces trois nombres est codé sur 1 octet, c'est-à-dire sur 8 bits.
L'encodage d'une couleur occupera donc 3 octets.
Une image de \(800 \times 600\) pixels occupera dans la mémoire \(800 \times 600 \times 3= 1440000 \text{ octets}=1440 \text{ koctets}=1.44 \text{ Mo}\)
QCM
👉 Si vous n'avez pas d'identifiant, saisir le nombre \(0\).
IX. La NASA vous parle ...⚓︎
Dans "lemonde.fr" du 23 février 2021, nous pouvions lire :
Après un voyage de sept mois, le rover Perseverance, conçu par les équipes de la NASA, s’est finalement posé sur le sol de la planète Mars jeudi 18 février : un accomplissement scientifique pour l’agence spatiale américaine, qui a passionné certains internautes.
Lundi 22 février, la NASA a publié la vidéo de l’atterrissage de l’engin sur Mars, ajoutant lors d’une conférence de presse, qu’un message secret avait été glissé dans la vidéo. La vidéo de l'atterrisage :
On peut en effet voir que le parachute du rover utilisé pour atterrir présente un motif particulier à base de barres rouges sur fond blanc, et que ces barres suivent un motif qui pourrait cacher un message. Et effectivement, le parachute est divisé en quatre cercles, eux-mêmes composés d’ensembles de dix barres formant un code binaire : chaque barre rouge correspond à un 1, et chaque barre blanche à un 0.
Voici l'image du parachute :
Pour vous aider, on a réalisé l'image ci-dessous.
Les caractères à trouver sont cachés par des rectangles. Sur le cercle extérieur, ce sont des nombres qu'il faut trouver. Nous avons donné quelques réponses ... Cela doit vous aider ....
Nous observons quatre anneaux concentriques. Dans chacun des anneaux se cache un message constitué de caractères codés sur 7 bits. Chaque caractère est séparé par 3 bits à 0. On parcourt les anneaux dans le sens horaire en commençant par le plus petit. Lorsqu'on en a terminé un anneau, il suffit de passer sur le suivant en spirale.
A vous de tout décoder ... pour cela nous allons vous aider ...
Etude des anneaux 1, 2 et 3
1. 👉 Le premier caractère à trouver, est celui qui est entouré en vert.
En binaire sur 7 bits, c'est donc 0000100.
Convertir ce nombre binaire en décimal. A vous de trouver à quel caractère de l'alphabet cela correspond (vous avez des exemples pour vous aider.)
Solution
\((0000100)_2=(4)_{10}\). Or la 4ème lettre de l'alphabet est "D".
👉 Le premier caractère à trouver est donc D
2. Retrouver tous les les caractères manquants des trois premiers cercles, puis décoder le message.
Solution
Réponse : DARE MIGHTY THINGS
On pourrait traduire ce message par "Osez des choses puissantes" ou "Osez le sublime" qui est est le slogan du laboratoire Jet Propulsion de la NASA, qui a réalisé une grande partie du travail autour du rover Perseverance.
Etude de l'anneau 4
L'anneau 4 contient les coordonnées géographiques (sous la forme degrés, minutes, secondes) d'un lieu que voulait nous montrer les ingénieurs de la NASA.
Les caractères 4 et 8 sont les directions cardinales : N, S, E ou W. Les autres caractères sont des entiers obtenus en convertissant le code en décimal.
Retrouver les caractères manquants de l'image précédente.
Solution
34 11 58 'N' 118 10 31 'W'
Géolocalisation
1. Compléter la liste coord
de taille 8 trouvée dans le dernier anneau.
2. Visualiser le lieu
Nous allons utiliser la bibliothèque folium
pour localiser le lieu sur une carte.
Il faut, dans un premier temps, transformer les coordonnées géographiques de type DMS en DD.
Exemple :
48°50'51.56" = 48 + 50/60 + 56/3600 = 48.8476°.
De plus, il faut attribuer un coeficient -1 pour la latitude Nord et la longitude Ouest.
😊 Nous avons réalisé tous ces calculs pour vous ...
Suivre le lien et exécuter la cellule :
Auteur Gilles LASSUS
Modifications : Mireille COILHAC