Booléens, flottants et textes
Valeurs booléennes, opérateurs and, or, not et xor, tables de vérité et portes logiques ; représentation approximative des réels par les flottants ; codage des caractères (ASCII, Unicode, UTF-8).
1. Booléens et logique
Définition
Un booléen vaut True (vrai, $1$) ou False (faux, $0$). Opérateurs : non (not), et (and : vrai si les deux sont vrais), ou (or : vrai si au moins un est vrai), ou exclusif (xor, ^ en Python sur les entiers : vrai si exactement un est vrai).
Propriété · Tables de vérité
| $a$ | $b$ | $a$ et $b$ | $a$ ou $b$ | $a$ xor $b$ |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
Attention · Évaluation paresseuse
En Python, a and b n'évalue pas b si a est faux ; a or b n'évalue pas b si a est vrai. Ainsi x != 0 and 1 / x > 2 ne provoque jamais de division par zéro.
2. Les flottants
Définition
Les réels sont représentés de façon approchée par des nombres à virgule flottante (norme IEEE 754) : un signe, un exposant et une mantisse, en binaire. Beaucoup de décimaux simples, comme $0{,}1$, n'ont pas d'écriture binaire finie.
Exemple · 0,1 + 0,2
En Python, 0.1 + 0.2 == 0.3 renvoie False : on obtient 0.30000000000000004. On compare donc des flottants avec une tolérance : abs(a - b) < 1e-9.
3. Les textes
Propriété · Codages
ASCII : $7$ bits, $128$ caractères (lettres non accentuées, chiffres, ponctuation ; 'A' $= 65$). ISO-8859-1 (latin-1) : $8$ bits, ajoute les accents d'Europe de l'Ouest. Unicode attribue un numéro (point de code) à chaque caractère de toutes les écritures ; UTF-8 le code sur $1$ à $4$ octets, en restant compatible avec ASCII.
Activité · Explorer les codes en Python
ord("A"), chr(97), ord("é") et "é".encode("utf-8").'a', $233$ et b'\xc3\xa9' (deux octets).S'entraîner
Exercices corrigés
🎓 20 exercices corrigés et un quiz vous attendent dans ce chapitre.
Créez votre compte gratuit pour voir les corrections, faire les quiz et suivre votre progression.
Évaluer une expression
★☆☆Que vaut (3 > 2) and (5 == 4) ?
Évaluer avec or
★☆☆Que vaut not (2 > 3) or False ?
Table de vérité
★★☆Dresser la table de vérité de $\text{non}(a \text{ et } b)$.
Loi de De Morgan
★★☆Vérifier par une table que $\text{non}(a \text{ ou } b) = (\text{non } a) \text{ et } (\text{non } b)$.
Ou exclusif
★☆☆Que vaut $1$ xor $1$ ? $0$ xor $1$ ?
Année bissextile
★★★Une année est bissextile si elle est divisible par $4$ mais pas par $100$, ou divisible par $400$. Écrire l'expression booléenne en Python.
Évaluation paresseuse
★★☆Pourquoi x != 0 and 10 / x > 1 ne provoque-t-il pas d'erreur quand $x = 0$ ?
Porte logique
★★☆Une alarme sonne si la porte est ouverte ET que le système est armé. Quelle porte utiliser ?
Additionneur
★★★Pour additionner deux bits $a$ et $b$ : somme $= a$ xor $b$, retenue $= a$ et $b$. Vérifier pour $1 + 1$.
Flottants
★☆☆Que renvoie 0.1 + 0.2 == 0.3 en Python ? Pourquoi ?
Comparer des flottants
★★☆Écrire une fonction presque_egal(a, b) qui teste l'égalité à $10^{-9}$ près.
Valeurs exactes
★★☆Parmi $0{,}5$ ; $0{,}25$ ; $0{,}1$, lesquels sont représentés exactement en binaire ?
Boucle avec flottants
★★★Pourquoi la boucle x = 0 ; while x != 1: x = x + 0.1 ne s'arrête-t-elle jamais ?
Code ASCII
★☆☆Le code ASCII de 'A' est $65$. Code de 'D' ? Caractère de code $72$ ?
Majuscule en minuscule
★★☆Les minuscules ont un code supérieur de $32$ aux majuscules. Écrire une fonction minuscule(c) pour une lettre majuscule non accentuée.
Taille en UTF-8
★★☆Combien d'octets occupe le mot « été » en UTF-8 ? en latin-1 ?
Caractères parasites
★★☆Un site affiche « Café ». Que s'est-il passé ?
Nombre de caractères ASCII
★☆☆Pourquoi ASCII ne code-t-il que $128$ caractères ?
Unicode
★☆☆Quel est l'intérêt d'Unicode ?
Vrai ou faux
★★☆a) True or False vaut False. b) UTF-8 est compatible avec ASCII. c) Tous les décimaux sont exacts en flottant.
Vérifier
Avez-vous bien compris ?
Répondez au quiz : la correction s'affiche immédiatement.