name: inverse layout: true class: center, middle, inverse --- # Inès de Courchelle ## Informatique 1 ## Les booléens et les conversions  --- layout: false # Aujourd'hui ## Objectifs - Comprendre la mécanique des booléens - Représenter un problème en logique booléennes - Convertir des entiers et des réels dans plusieurs bases - Réaliser des opérations sur des entiers - Encoder les entiers signés --- # Today ## Plan 1. Algèbre de boole 2. Les bases et les converstions 3. La représentation des entiers signés 4. La représentations des réels en binaire --- # Today ## Plan 1. .under[Algèbre de boole] 2. Les bases et les converstions 3. La représentation des entiers signés 4. La représentations des réels en binaire --- # Algèbre de boole ## Définition .otro-blockquote[ L'algèbre de Boole, ou calcul booléen, est la partie des mathématiques qui s'intéresse à une approche algébrique de la logique, vue en termes de variables, d'opérateurs et de fonctions sur les variables logiques, ce qui permet d'utiliser des techniques algébriques pour traiter les expressions à deux valeurs du calcul des propositions.] ## George Boole .pull-left[
] .pull-right[ Inventée en 1854 ] --- # Algèbre de boole ## La notation En gros, les données ne peuvent être représentées que par 2 valeurs : - VRAI - FAUX ## Les opérations ET, OU, NON, X-OU ... --- # Algèbre de boole ## NON NON : inversion de valeur ## Représentation \\(S = \overline{A} \\) ## Table de vérité | A | S | |---|---| | 0 | 1 | | 1 | 0 | --- # Algèbre de boole ## ET ET : Vrai si les 2 énoncés sont vrais ## Représentation \\( S = A . B = A \cap B = A \wedge B = A * B = AB \\) ## Table de vérité | A | B | S | |---|---|---| | 0 | 0 | 0 | | 1 | 0 | 0 | | 0 | 1 | 0 | | 1 | 1 | 1 | --- # Algèbre de boole ## OU OU : vrai si au moins un énoncé est vrai ## Représentation \\( S = A \cup B = A \lor B = A + B \\) ## Table de vérité | A | B | S | |---|---|---| | 0 | 0 | 0 | | 1 | 0 | 1 | | 0 | 1 | 1 | | 1 | 1 | 1 | --- # Algèbre de boole ## XOU XOU : vrai si au plus un énoncé est vrai ## Représentation \\( S = A \oplus B \\) ## Table de vérité | A | B | S | |---|---|---| | 0 | 0 | 0 | | 1 | 0 | 1 | | 0 | 1 | 1 | | 1 | 1 | 0 | --- # Algèbre de boole ## Les opérations #### Distributivité - \\( A (B + C) = AB + AC \\) - \\( A + (BC) = (A + B) (A + C) \\) #### Factorisation \\( AB + BC = B (A+C) \\) --- # Algèbre de boole ## Les opérations #### Piège on peut rajouter des expressions tant que ça ne modifie pas le résultat #### Exemple \\( A + B \Leftrightarrow A + B . 1 \Leftrightarrow A + B . (A + \overline{A}) \\) Formule du cours : \\( 1 + A = 1 \\) --- # Algèbre de boole ## Les opérations #### Lois de Morgan - \\( \overline{A . B} = \overline{A} + \overline{B} \\) - \\( \overline{A + B} = \overline{A} . \overline{B} \\) #### Commutativité - \\( \overline{A . B} = \overline{B . A} \\) - \\( \overline{A + B} = \overline{B + A} \\) --- # Algèbre de boole ## Résumé | Propriété | ET | OU | Propriété | ET | OU | |----------------|-----------------------|----------------------------|-----------------|--------------------------------------------------|--------------------------------------------------| | identité | 1.A = A | 0 + A = A | null | 0.A =0 | 1 + A = 1 | | Associativité | (A.B).C = A.(B.C) | (A+B)+C = A+(B+C) | Commutativité | A.B=B.A | A + B = B+ A | | Distributivité | A (B + C) = AB + AC | A + (BC) = (A + B) (A + C) | idempotence | A.A = A | A + A = A | | Inversion | \\(A. \overline{A} = 0 \\) | \\( A + \overline{A} = 1 \\) | Lois de Morgane | \\( \overline{A . B} = \overline{A} + \overline{B} \\) | \\( \overline{A + B} = \overline{A} . \overline{B}\\) | --- # Algèbre de boole ## Objectifs - Raisonner en Vrai et Faux en algorithme et programmation - Construire les futurs conditions de nos algos - Optimiser les algos ## Fun fact Un club de D3 Anglaise, **Lincoln City FC**, l'a mis à l'honneur sur son maillot pour la saison 25-26
Lincolnshire
--- # Today ## Plan 1. Algèbre de boole 2. .under[Les bases et les converstions] 3. La représentation des entiers signés 4. La représentations des réels en binaire --- # Réprésentation des données ## Définitions .otro-blockquote[La manière dont les informations (nombres, textes, sons, images, etc.) sont organisées, codées et stockées dans un système informatique afin qu’elles puissent être traitées par un ordinateur.]
--- # Réprésentation des données ## Les unités - bit : information de base, il peut valoir 0 ou 1 (1 Kb = 1000 bits) - octet (byte en anglais) : correspont à 8 bits ## Les bases Il existe de multiples systèmes de comptage dans des bases différentes : - base 2 : binaire - base 8 : octal - base 10 : décimal - base 12 : mois de l'année - base 16 : hexadécimal - Base 60 : minutes, secondes - ... --- # Les bases ## Base 10 (décimal) - c'est notre base à nous, celle avec laquelle nous comptoms - les chiffres vont de 0 à 9 ## Exemple de décomposition - \\( 324 = 3 \times 100 + 2 \times 10 + 4 \times 1 \\) - \\( 324 = 3 \times 10^2 + 2 \times 10^1 + 4 \times 10^0 \\)
--- # Les bases ## Binaire - En base 2, les chiffres sont 0 et 1 - Tout est puissance de 2 ## Valeurs des puissances de 2 | puissance | \\(2^8\\) | \\(2^7\\) | \\(2^6\\) | \\(2^5\\) | \\(2^4\\) | \\(2^3\\) | \\(2^2\\) | \\(2^1\\) | \\(2^0 \\) | |-------------------|-----------|-----------|-----------|-----------|-----------|-----------|--------|-----------|------------| | valeur en base 10 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | --- # Les conversions ## Base 10 vers base 2 On considère le tableau suivant :
En base 2, nous ne sommes autorisés à utiliser seulement les chiffres 0 et 1. Donc pour représenter un nombre donné nous devons le retrouver en faisant la somme des exposants. #### Exemple : Comment écrire 12 en binaire ? \\( (12)_{10} = (????)_2 \\) --- # Les conversions ## Base 10 vers base 2 #### Exemple : Comment écrire 12 en binaire ? \\( (12)_{10} = (1100)_2 \\)
\\( 2^3 \times 1 + 2^2 \times 1 + 2^1 \times 0 + 2^0 \times 0 = 12 \\) \\( \Leftrightarrow \\) \\( 8 \times 1 + 4 \times 1 + 2 \times 0 + 1 \times 0 = 12 \\) --- # Les conversions ## La méthode des divisions successives Le principe consiste à diviser successivement par 2, le nombre à convertir jusqu'à ce que le résultat de la division soit égal à zéro. #### Exemple On souhaite convertir \\( (23)_{10} => (??)_2 \\) --- # Les conversions ## La méthode des divisions successives
--- # Les bases ## Octal - En base 8, les chiffres vont de 0 à 7 - Tout est puissance de 8 ## Valeurs des puissances de 8 | puissance | \\( 8^4 \\) | \\( 8^3 \\) | \\( 8^2 \\) | \\(8^1\\) | \\(8^0\\) | |-------------------|-------------|-------------|-------------|-----------|-----------| | valeur en base 10 | 4096 | 512 | 64 | 8 | 1 | --- # Les conversions ## Octal to Decimal #### Exemple On souhaite convertir \\( (11)_{10} => (??)_8 \\)
\\( 8^1 \times 1 + 8^0 \times 3 = 11 \\) --- # Les bases ## Hexadécimal - En base 16, les chiffres vont de 0 à 9 et les lettres A à F. - Tout est puissance de 16 #### Attention *En base 16, on écrit pas 10 mais A* | **F** | **E** | **D** | **C** | **B** | **A** | **9** | **8** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------| | *15* | *14* | *13* | *12* | *11* | *10* | | | | | | | | | | | --- # Les conversions ## Decimal to Hexadecimal #### Exemple On souhaite convertir \\( (25)_{10} \\) \\( 25/16 = 1 \\) et il reste 9 Donc \\( (19)_{16} \\) --- # Les conversions ## Octal to binary ? **Comment convertir d'une base 8 à une base 2 ?** **Exemple** Nous voulons convertir $$(124)_8$$ en base 2 ? Le chiffre 8 est trouvé est trouvé comme suit : $$8 = 2^3$$ On va donc générer un nombre à générer un nombre binaire à 3 chiffres pour chaque entier du nombre 124 ! --- # Les conversions ## Octal to binary ?
--- # Les conversions ## Hexadecimal to binary ? **Comment convertir d'une base 16 à une base 2 ?** **Exemple** Nous voulons convertir $$(2D)_{16}$$ en base 2 ? Le chiffre 16 est trouvé est trouvé comme suit : $$ 16 = 2^4 $$ On va donc générer un nombre à générer un nombre binaire à 4 chiffres pour chaque entier du nombre 2D ! --- # Les conversions ## Hexadecimal to binary ?
--- # Today ## Plan 1. Algèbre de boole 2. Les bases et les converstions 3. .under[La représentation des entiers signés] 4. La représentations des réels en binaire --- # Les entiers signés ## Comment représenter les négatifs en binaire ? On peut utiliser un bit pour représenter le signe : - 0 .leftarrow[] positif - 1 .leftarrow[] négatif ## 3 representations - Signe et valeur absolue - Complément à 1 - Complément à 2 --- # Les entiers signés ## Signe et valeur absolue On va utiliser le bit le plus à gauche pour représenter le signe : - 0 .leftarrow[] positif - 1 .leftarrow[] négatif ## Exemple sur 1 octet **Rappel** un octet est égal à 8 bits on souhaite représenter 86 et -86 --- # Les entiers signés ## Signe et valeur absolue .pull-left[ 1. On convertit déjà 86 en binaire \\( 86 / 2 = 43 \\) et il reste 0 \\( 43 / 2 = 21 \\) et il reste 1 \\( 21 / 2 = 10 \\) et il reste 1 \\( 10 / 2 = 5 \\) et il reste 0 \\( 5 / 2 = 2 \\) et il reste 1 \\( 2 / 2 = 1 \\) et il reste 0 \\( 1 / 2 = 0 \\) et il reste 1 (fin) ] .pull-right[ on lit les restes de bas en haut $$ (86)_{10} = (1010110)_2 $$ ] --- # Les entiers signés ## Signe et valeur absolue 2. On code l'entier sur 1 octet soit 8 bits **0**1010110 3. Le bit le plus à gauche va servir pour le signe - **0**101 0110 .leftarrow[] 86 - **1**101 0110 .leftarrow[] -86 --- # Les entiers signés ## Signe et valeur absolue #### Problèmes - 2 façons de représenter le zero - **0**000 0000 .arrow[] 0 - **1**000 0000 .arrow[] 0 - Soustraction impossible --- # Les entiers signés ## Complément à 1 1. On va utiliser le bit le plus à gauche pour représenter le signe 2. On inverse tout les bits si c'est un négatif ## Exemple sur un octet - **0**101 0110 .leftarrow[] 86 - **1**010 1001 .leftarrow[] -86 --- # Les entiers signés ## Complément à 2 1. On va utiliser le bit le plus à gauche pour représenter le signe 2. On inverse tout les bits si c'est un négatif 3. on ajoute 1 si c'est un négatif ## Exemple sur un octet - **0**101 0110 .leftarrow[] 86 - **1**010 1001 + 1 = **1**010 1010 .arrow[] -86 --- # Concrètement ça sert à quoi ? ## Pourquoi on fait ça ? - Processeurs et microcontrôleurs : les opérations des nombres négatifs sont réalisées en complément à 2 - Langage de programmation : la machine stock tout en complément à 2
--- # Today ## Plan 1. Algèbre de boole 2. Les bases et les converstions 3. La représentation des entiers signés 4. .under[La représentations des réels en binaire] --- # Les réels ## Définitions .otro-blockquote[En mathématiques, un nombre réel est un nombre qui peut être représenté par une partie entière munie d'un signe positif ou négatif, et une liste finie ou infinie de décimales.] Un nombre à virgule :) #### Comment représenter des réels en binaire ?
--- # Les réels ## En base 10 86,42 .arrow[] \\( 8 \times 10^1 + 6 \times 10^0 , 4 \times 10^{-1} + 2 \times 10^{-2} \\) ## En base 2 (c'est pareil !) #### La partie entière $$(86)_{10} = (1010110)_2 $$ #### La partie décimale $$(42)_{10} = (???)_2 $$ --- # Les réels ## La partie décimale .pull-left[ $$0,42 \times 2 = 0,84$$ $$0,84 \times 2 = 1,68$$ $$0,68 \times 2 = 1,36$$ $$0,36 \times 2 = 0,72$$ $$0,72 \times 2 = 1,44$$ $$0,44 \times 2 = 0,88$$ $$0,88 \times 2 = 1,76$$ $$0.76 \times 2 = 1,52$$ $$ ... $$ ] .pull-right[ Ici, c'est sans fin, on peut s'arrêter là et arrondir ! $$0110 1011$$ ] --- # Les réels ## On assemble le tout #### La partie entière $$ (86)_{10} = (1010110)_2 $$ #### La partie décimale $$ (42)_{10} = (01101011)_2 $$ #### Fusion ! $$ (86,42)_{10} = (1010110,01101011) $$ --- # Les réels ## Une virgule flottante c'est une façon de représenter un nombre réel en binaire, en utilisant la notation scientifique ## Exemple en base 10 $$ 86,42 = 8,642 \times 10^1 $$ ## En gros On déplace la virgule afin d'avoir qu'un seul chiffre avant --- # Les réels ## Norme IEEE 754 #### C'est quoi ? - C'est la norme internationnale qui définit comment représenter et manipuler des nombres en virgule flottante dans des ordinateurs. - C'est un standard de tout les processeurs #### Plusieurs types - 32 bits (float) : simple précision - 64 bits (double) : double précision - ... --- # Les réels ## Norme IEEE 754 - Au début de l'informatique dans les années 70-80, chaque constructeur avait son encodage de flottants - **Résultat** un programme codé sur une machine, ne marchait pas sur une autre machine ## Objectifs - .under[Uniformiser] la représentation entre tout les scientifiques et constructeurs - .under[Représenter] plus de réels possible - .under[Contrôler] les arrondies. La norme définit comment arrondir ## Applications concretrètes - Informatique scientifique - Jeux vidéos - Crypto - ... --- # Les réels ## Norme IEEE 754 - simple précision
#### Pour transformer un réel en format IEEE, il y a 8 étapes à réaliser : .pull-left[ - étape 1. convertir la partie entière en binaire - étape 2 : convertir la partie décimale en binaire - étape 3 : combiner la partie entière et décimale - étape 4 : utiliser la notation scientifique ] .pull-right[ - étape 5 : identifier le bit de signe - étape 6 : transformer l'exposant de la notation scientifique - étape 7 : convertir l'exposant en binaire - étape 8 : assembler le signe, l'exposant et la mantisse ] --- # Les réels ## Norme IEEE 754 - simple précision #### Exemple $$ (37,4)_{10} = (????)_2 $$ #### Pour transformer un réel en format IEEE, il y a 8 étapes à réaliser : .pull-left[ - .under[étape 1. convertir la partie entière en binaire] - étape 2 : convertir la partie décimale en binaire - étape 3 : combiner la partie entière et décimale - étape 4 : utiliser la notation scientifique ] .pull-right[ - étape 5 : identifier le bit de signe - étape 6 : transformer l'exposant de la notation scientifique - étape 7 : convertir l'exposant en binaire - étape 8 : assembler le signe, l'exposant et la mantisse ] --- # Les réels ## Norme IEEE 754 - simple précision #### étape 1 : convertir la partie entière en binaire $$(37)_{10} = (????)_2 $$
--- # Les réels ## Norme IEEE 754 - simple précision #### étape 2 : convertir la partie décimale en binaire $$ (0,4)_{10} = (????)_2 $$
--- # Les réels ## Norme IEEE 754 - simple précision #### étape 3 : combiner la partie entière et décimale $$ (37,4)_{10} = (1 0 0 1 0 1 , 0 1 1 0 0 1 1 0 0 1 1 0 0 ...)_2 $$ .pull-left[
] .pull-right[
] --- # Les réels ## Norme IEEE 754 - simple précision #### étape 4 : utiliser la notation scientifique
--- # Les réels ## Norme IEEE 754 - simple précision #### étape 5 : identifier le bit de signe $$ (37,4)_{10} $$
--- # Les réels ## Norme IEEE 754 - simple précision #### étape 6 : transformer l'exposant de la notation scientifique 1. On est en simple précision donc on va jusqu’à 127. 2. L’exposant est de 5 3. 127 + 5 = 132 --- # Les réels ## Norme IEEE 754 - simple précision #### étape 7 : convertir l'exposant en binaire
--- # Les réels ## Norme IEEE 754 - simple précision #### étape 8 : assembler le signe, l'exposant et la mantisse
--- # Conclusion ## Aujourd'hui 1. Algèbre de boole 2. Les bases et les converstions 3. La représentation des entiers signées 4. La représentations des réels en binaire #### Beaucoup de notions ! Il faut réviser en dehors des cours !