Entiers et booléens

Comment une suite de 0 et de 1 représente-t-elle un entier ou une décision ?

Environ 50 minutes

  • Convertir entre les bases 2, 10 et 16
  • Déterminer une largeur et utiliser le complément à deux
  • Établir une table de vérité et expliquer le court-circuit
Sommaire
  1. Des bits aux écritures en base 2, 10 et 16
  2. Compter les bits et anticiper un débordement
  3. Représenter les entiers négatifs par complément à deux
  4. Calculer une condition booléenne
  5. Au bac : expliquer une représentation

Comment une suite de 0 et de 1 représente-t-elle un entier ou une décision ?

Le même octet peut avoir plusieurs sens. Cette leçon apprend à annoncer une convention, convertir des écritures, prévoir les limites d’un calcul et traduire une règle en condition logique. Tu utiliseras les puissances de deux, la division euclidienne et des tests Python simples.

Des bits aux écritures en base 2, 10 et 16

Un bit peut prendre deux valeurs, 0 ou 1. Un octet regroupe huit bits. La mémoire conserve des suites de bits ; le programme décide comment les interpréter. La suite 00101101 peut ainsi représenter l’entier naturel 45 selon une convention non signée. Ajouter des zéros à gauche ne change pas cet entier, mais peut préciser la largeur du stockage.

En base dix, chaque position porte une puissance de dix. En base deux, les poids sont, de droite à gauche, 1, 2, 4, 8, 16, 32, puis les puissances suivantes de deux. On multiplie chaque bit par son poids et on additionne. L’indice indique la base : 101₂ vaut cinq, tandis que 101₁₀ vaut cent un. Ce ne sont pas les chiffres seuls qui donnent le nombre.

Les barres vertes contribuent au nombre. Les barres grises, associées au bit 0, ne sont pas ajoutées.

Pour convertir un entier naturel vers la base deux, effectue des divisions euclidiennes successives par deux, puis lis les restes du dernier au premier. Pour 13, les quotients successifs sont 6, 3, 1, 0 et les restes 1, 0, 1, 1. La lecture inversée donne 1101₂. L’autre méthode consiste à soustraire les plus grandes puissances de deux possibles.

La base seize utilise les chiffres 0 à 9, puis A, B, C, D, E, F pour dix à quinze. Comme seize vaut deux puissance quatre, un chiffre hexadécimal correspond exactement à quatre bits. On regroupe les bits par paquets de quatre depuis la droite, en complétant à gauche si nécessaire. Cela rend les longues écritures binaires plus lisibles sans changer la valeur représentée.

Exemple résolu

Convertis 173₁₀ en binaire puis en hexadécimal.

  1. Étape 1 : Décompose 173 en puissances de deux : 128 + 32 + 8 + 4 + 1. Les poids 64, 16 et 2 ne sont pas utilisés.
  2. Étape 2 : Écris les bits dans l’ordre des poids 128, 64, 32, 16, 8, 4, 2, 1 : 10101101₂.
  3. Étape 3 : Regroupe 1010 et 1101. Le premier groupe vaut dix, donc A ; le second vaut treize, donc D.
  4. Étape 4 : Vérifie dans la base de départ : A × 16 + D correspond à 10 × 16 + 13 = 173.

Résultat : 173₁₀ = 10101101₂ = AD₁₆.

Piège à éviter : Lire les paquets depuis la gauche sans compléter la largeur peut déplacer les poids et changer le nombre.

À toi d'essayer

Convertis 3B₁₆ en décimal et donne son écriture binaire sur huit bits.

Voir la réponse

3 × 16 + 11 = 59. Les groupes 0011 et 1011 donnent 00111011₂. Vérification : 32 + 16 + 8 + 2 + 1 = 59.

Compter les bits et anticiper un débordement

Avec n bits, il existe deux puissance n configurations. Pour des entiers naturels non signés, elles représentent les valeurs de 0 à 2ⁿ − 1 inclus. Sur huit bits, cela donne 256 valeurs mais une valeur maximale de 255. Il faut distinguer le nombre de valeurs possibles et le plus grand entier stockable. Les largeurs de 8, 16, 32 et 64 bits sont courantes.

Pour un entier strictement positif N, cherche le plus petit n tel que N soit inférieur à 2ⁿ. Par exemple, 31 tient sur cinq bits et 32 exige six bits. Zéro s’écrit habituellement avec le seul chiffre 0, même si un stockage matériel lui réserve plusieurs bits. Une largeur fixée s’annonce avant tout calcul : les limites dépendent de cette convention.

La somme de deux entiers non signés sur n bits peut demander n + 1 bits. Leur produit tient sur au plus 2n bits. Plus généralement, un produit de valeurs codées respectivement sur n et m bits tient sur au plus n + m bits. Ce sont des majorations ; le résultat concret peut demander moins. Par exemple, 15 + 1 = 16 exige cinq bits, alors que 15 × 15 = 225 en exige huit.

Dans une addition binaire, 1 + 1 donne 10₂ : on écrit 0 dans la colonne et on reporte 1 à gauche. Avec une retenue entrante, 1 + 1 + 1 donne 11₂. Ainsi 0111₂ + 0001₂ donne 1000₂. En non signé sur quatre bits, le résultat est huit ; il n’y a pas de débordement. Si seule la largeur disponible est conservée, une retenue finale peut être perdue.

Les entiers Python ne sont pas limités à 32 ou 64 bits : leur précision s’adapte, dans les limites des ressources disponibles. Un calcul Python exact ne prouve donc pas qu’un résultat tient dans un registre de huit bits. Pour répondre à une question de représentation, travaille d’abord avec le modèle de stockage demandé.

Représenter les entiers négatifs par complément à deux

Le complément à deux sur n bits représente les entiers de −2ⁿ⁻¹ à 2ⁿ⁻¹ − 1. Sur huit bits, l’intervalle est donc de −128 à 127. Le bit de gauche a le poids négatif −128, et les autres ont les poids positifs 64, 32, 16, 8, 4, 2, 1. Ce bit indique le signe, mais les autres bits ne donnent pas simplement la valeur absolue.

Pour coder un entier négatif représentable, écris sa valeur absolue sur la largeur demandée, inverse tous les bits, puis ajoute un. Une autre méthode consiste à calculer 2ⁿ plus l’entier négatif, puis à coder ce résultat comme un entier non signé. Les deux méthodes donnent les mêmes bits. Pour décoder, lis la valeur non signée ; si le premier bit vaut 1, retranche 2ⁿ.

Exemple résolu

Code −37 sur huit bits en complément à deux, puis vérifie le résultat.

  1. Étape 1 : 37 = 32 + 4 + 1, donc son écriture sur huit bits est 00100101.
  2. Étape 2 : L’inversion donne 11011010. L’ajout de un donne 11011011.
  3. Étape 3 : La lecture non signée de 11011011 vaut 219. Comme le bit initial vaut 1, la lecture signée est 219 − 256.
  4. Étape 4 : On obtient −37. Avec les poids signés, on retrouve −128 + 64 + 16 + 8 + 2 + 1 = −37.

Résultat : Le codage demandé est 11011011.

Piège à éviter : Mettre seulement un 1 devant le codage de 37 ne réalise pas un complément à deux.

Les mêmes bits ont plusieurs lectures possibles : 11111111 vaut 255 en non signé et −1 en complément à deux sur huit bits. Le contexte est indispensable. En signé sur huit bits, 127 + 1 est hors de l’intervalle représentable ; les huit bits conservés sont 10000000, lus −128. Ce résultat ne signifie pas que l’égalité mathématique 127 + 1 = −128 serait vraie.

À toi d'essayer

Un capteur code des températures entières de −40 à 85 inclus. Combien de bits faut-il au minimum avec le complément à deux ? Justifie sans énumérer toutes les températures.

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

Calculer une condition booléenne

Une valeur booléenne est vraie ou fausse. En Python, elle s’écrit True ou False. Pour deux booléens a et b, a and b est vrai quand les deux le sont ; a or b est vrai quand au moins un l’est ; not a inverse la valeur de a. Le OU usuel est inclusif : il accepte aussi le cas où les deux entrées sont vraies.

Le OU inclusif accepte deux entrées vraies. Le OU exclusif accepte exactement une entrée vraie.

Une table de vérité énumère toutes les combinaisons des entrées. Deux variables donnent quatre lignes ; trois en donnent huit. Ajoute des colonnes intermédiaires pour calculer progressivement une expression. Deux expressions sont équivalentes si leurs sorties coïncident sur toutes les lignes. Une seule ligne différente suffit à réfuter une équivalence. Avec des booléens, a != b exprime le OU exclusif.

Exemple résolu

Une porte s’ouvre si une personne possède un badge b ou une autorisation a, et si elle n’est pas suspendue s. Écris la condition et teste b vrai, a faux, s vrai.

  1. Étape 1 : La présence d’un badge ou d’une autorisation s’écrit (b or a). La suspension doit être absente, donc not s doit être vrai.
  2. Étape 2 : La condition complète est (b or a) and (not s). Les parenthèses rendent la règle de regroupement explicite.
  3. Étape 3 : Pour les valeurs proposées, b or a vaut True mais not s vaut False.
  4. Étape 4 : True and False vaut False : la porte reste fermée malgré la présence d’un badge.

Résultat : La condition est (b or a) and (not s) ; elle est fausse dans ce cas.

Piège à éviter : Écrire b or (a and not s) autoriserait à tort une personne suspendue possédant un badge.

Les opérateurs Python and et or sont évalués de gauche à droite avec arrêt possible. Si la première condition d’un and est fausse, la seconde n’est pas évaluée. Si la première condition d’un or est vraie, la seconde n’est pas évaluée. Ainsi, avec x numérique, (x != 0) and (10 / x > 2) évite la division par zéro lorsque x vaut zéro. Inverser ces deux tests supprimerait cette protection.

À toi d'essayer

Un programme doit refuser l’accès exactement lorsque le badge b et l’autorisation a sont tous les deux absents. Propose une expression, puis vérifie les quatre cas.

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

Au bac : expliquer une représentation

En première, tu construis les bases mobilisables si tu poursuis la spécialité NSI en terminale. Une réponse argumentée distingue la valeur mathématique, son codage et l’opération exécutée. Un résultat numérique seul ne montre pas que tu as compris cette distinction.

Rendre le raisonnement vérifiable

  1. Relève la base, la largeur et la convention signée ou non signée. Écris l’intervalle représentable avant de traiter un entier négatif ou une opération.
  2. Présente les poids utilisés ou les divisions successives. Pour le complément à deux, conserve exactement le nombre de bits demandé à chaque étape.
  3. Vérifie le résultat par une conversion inverse. Pour une opération, compare le résultat mathématique aux bornes avant d’interpréter les bits conservés.
  4. Pour une condition, traduis les mots en connecteurs, pose les parenthèses puis teste les cas limites. Une table complète prouve une équivalence ; quelques essais ne suffisent pas.

Vocabulaire

Bit :
Valeur binaire égale à 0 ou 1.
Poids :
Valeur associée à une position dans une écriture.
Complément à deux :
Convention de représentation des entiers relatifs sur une largeur fixée.
Débordement :
Résultat mathématique hors de l’intervalle représentable.
Court-circuit :
Arrêt de l’évaluation d’une expression logique lorsque sa valeur est déjà déterminée.
Attention :

Évite de confondre 2ⁿ configurations et une valeur maximale de 2ⁿ. Ne change pas de largeur au milieu d’un complément à deux. Ne confonds pas and avec une addition, ni or avec le OU exclusif. En Python, = affecte une valeur, tandis que == compare deux valeurs.

Bilan

QuestionRepère
Valeur de bitsSomme des poids selon la convention
Largeur suffisanteComparaison aux bornes
Condition correcteTous les cas de la table

Pour poursuivre, ouvre S’entraîner dans le hub Exercices du site, à l’adresse /exercices.

À retenir

  • Un octet contient huit bits. Sur n bits, un entier non signé est compris entre 0 et 2ⁿ − 1.
  • Un chiffre hexadécimal représente quatre bits.
  • En complément à deux sur n bits, l’intervalle va de −2ⁿ⁻¹ à 2ⁿ⁻¹ − 1.
  • and exige deux conditions vraies ; or en exige au moins une ; not inverse une valeur booléenne.
  • Les opérateurs and et or de Python peuvent ne pas évaluer leur second opérande.

Fiche de révision : Entiers et booléens

Conversion

2D₁₆ donne 0010 1101₂, soit 45₁₀. La valeur est conservée, seule l’écriture change.

Lecture signée sur huit bits

10000001 représente −128 + 1, donc −127. En non signé, ce même mot représente 129.

Contrôle de capacité

calcule d’abord le résultat dans les entiers mathématiques, puis compare-le à l’intervalle du stockage.

Logique

énumère les entrées, calcule les sous-expressions et vérifie la sortie finale. Pour protéger une division, place d’abord le test qui garantit un dénominateur non nul.

Et maintenant ?

Tu as lu le cours. L’étape suivante tient en une action.

Relis le coursLes exercices de ce chapitre arrivent bientôt.

Prolonge l’expérience !

Continue à explorer ce chapitre à travers de nouvelles activités, des défis et des expériences interactives. Avec Premium, l’apprentissage continue !

Ici, tu débloques aussi 2 corrections détaillées.

Parent ? Suivez les progrès de votre enfant.

Tous les cours de NSI