{
  "chapter": {
    "id": "numeration-entiers",
    "level": "premiere",
    "theme": "Représentation des données",
    "title": "Numération et représentation des entiers",
    "description": "Systèmes de numération positionnels (binaire, décimal, hexadécimal),\nconversions entre bases, opérations sur les entiers naturels,\nreprésentation des entiers relatifs en complément à deux,\ndépassement de capacité, applications (couleurs, adresses mémoire).",
    "prerequisites": [],
    "references": []
  },
  "questions": [
    {
      "id": "q01",
      "difficulty": 1,
      "skills": [
        "definition",
        "vocabulaire"
      ],
      "title": "Définition d'un bit",
      "statement": "Que désigne précisément le mot **bit** en informatique ?",
      "options": [
        {
          "text": "Un groupe de huit chiffres binaires",
          "correct": false,
          "feedback": "Erreur : un groupe de huit chiffres binaires s'appelle un\n**octet** (en anglais *byte*), pas un bit.\n"
        },
        {
          "text": "Une unité de mesure de la mémoire vive",
          "correct": false,
          "feedback": "Erreur : le bit est plutôt l'unité élémentaire d'information.\nLa mémoire vive se mesure en octets, kilo-octets,\ngiga-octets, etc.\n"
        },
        {
          "text": "Un chiffre binaire pouvant valoir $0$ ou $1$",
          "correct": true,
          "feedback": "Bonne réponse : « bit » est la contraction de\n*binary digit*. C'est l'unité élémentaire d'information,\nqui ne peut prendre que deux valeurs $0$ ou $1$.\n"
        },
        {
          "text": "Un nombre hexadécimal sur quatre chiffres",
          "correct": false,
          "feedback": "Erreur : un chiffre hexadécimal correspond à quatre bits,\nmais le bit lui-même est l'unité de base, pas un nombre\nhexadécimal.\n"
        }
      ],
      "explanation": "Le bit est l'unité élémentaire d'information en numérique.\nHuit bits forment un octet. Les capacités de stockage usuelles\nsont mesurées en octets, kilo-octets, méga-octets, etc."
    },
    {
      "id": "q02",
      "difficulty": 1,
      "skills": [
        "hexadecimal",
        "definition"
      ],
      "title": "Symboles du système hexadécimal",
      "statement": "Combien de symboles différents utilise le système hexadécimal\n(base $16$) ?",
      "options": [
        {
          "text": "$10$",
          "correct": false,
          "feedback": "Erreur : c'est le nombre de symboles du système décimal\n(base $10$). En hexadécimal, on a besoin de symboles\nsupplémentaires pour représenter $10, 11, \\ldots, 15$.\n"
        },
        {
          "text": "$16$",
          "correct": true,
          "feedback": "Bonne réponse : la base $16$ utilise $16$ symboles, à savoir\nles chiffres $0$ à $9$ pour les valeurs $0$ à $9$, puis les\nlettres A, B, C, D, E, F pour les valeurs $10$ à $15$.\n"
        },
        {
          "text": "$2$",
          "correct": false,
          "feedback": "Erreur : c'est le nombre de symboles de la base $2$ (le\nbinaire), pas de la base $16$.\n"
        },
        {
          "text": "$26$",
          "correct": false,
          "feedback": "Erreur : confusion possible avec le nombre de lettres de\nl'alphabet. L'hexadécimal utilise $10$ chiffres et $6$\nlettres, soit $16$ symboles au total.\n"
        }
      ],
      "explanation": "L'hexadécimal est très utilisé en informatique pour sa\ncompacité : un chiffre hexadécimal correspond à exactement\nquatre bits, soit la moitié d'un octet. Cela rend la lecture\ndes données binaires beaucoup plus aisée."
    },
    {
      "id": "q03",
      "difficulty": 1,
      "skills": [
        "conversion",
        "binaire-decimal"
      ],
      "title": "Conversion binaire vers décimal",
      "statement": "Que vaut $1011_2$ en base décimale ?",
      "options": [
        {
          "text": "$11$",
          "correct": true,
          "feedback": "Bonne réponse : $1011_2 = 1 \\cdot 8 + 0 \\cdot 4 + 1 \\cdot 2 + 1 \\cdot 1 = 11_{10}$.\n"
        },
        {
          "text": "$13$",
          "correct": false,
          "feedback": "Erreur : confusion possible avec $1101_2$. Bien lire les\nbits de gauche à droite et associer chacun à sa puissance\nde $2$.\n"
        },
        {
          "text": "$14$",
          "correct": false,
          "feedback": "Erreur : possible erreur de calcul ou décalage. Vérifier en\nadditionnant : $1011_2 = 8 + 2 + 1 = 11$.\n"
        },
        {
          "text": "$1011$",
          "correct": false,
          "feedback": "Erreur : ce serait la lecture comme un nombre décimal. Or\nen base $2$, chaque position a un poids différent\n(puissance de $2$, pas de $10$).\n"
        }
      ],
      "explanation": "Méthode : pour convertir un binaire en décimal, on associe à\nchaque bit une puissance de $2$ (en partant de la droite à\n$2^0$) et on additionne les puissances correspondant aux bits\nà $1$."
    },
    {
      "id": "q04",
      "difficulty": 1,
      "skills": [
        "conversion",
        "decimal-binaire"
      ],
      "title": "Conversion décimal vers binaire",
      "statement": "Quelle est l'écriture binaire (sur quatre bits) de l'entier\n$10$ ?",
      "options": [
        {
          "text": "$1010_2$",
          "correct": true,
          "feedback": "Bonne réponse : $10 = 8 + 2 = 1 \\cdot 2^3 + 0 \\cdot 2^2 + 1 \\cdot 2^1 + 0 \\cdot 2^0 = 1010_2$.\n"
        },
        {
          "text": "$0010_2$",
          "correct": false,
          "feedback": "Erreur : c'est $2_{10}$. Confusion possible entre la\nlecture de l'écriture décimale $10$ et la valeur binaire.\n"
        },
        {
          "text": "$1100_2$",
          "correct": false,
          "feedback": "Erreur : c'est $12_{10}$, pas $10$. Vérifier en\ndécomposant : $1100_2 = 8 + 4 = 12$.\n"
        },
        {
          "text": "$0101_2$",
          "correct": false,
          "feedback": "Erreur : c'est $5_{10}$, pas $10$. Possible inversion des\nbits (lecture dans le mauvais sens).\n"
        }
      ],
      "explanation": "Méthode des divisions successives par $2$ : $10 = 5 \\times 2 + 0$,\n$5 = 2 \\times 2 + 1$, $2 = 1 \\times 2 + 0$, $1 = 0 \\times 2 + 1$.\nOn lit les restes de bas en haut : $1010_2$."
    },
    {
      "id": "q05",
      "difficulty": 1,
      "skills": [
        "definition",
        "octet"
      ],
      "title": "Composition d'un octet",
      "statement": "Combien de bits contient un octet ?",
      "options": [
        {
          "text": "$4$",
          "correct": false,
          "feedback": "Erreur : $4$ bits forment un demi-octet (parfois appelé\n*quartet* ou *nibble*), équivalent à un chiffre hexadécimal.\n"
        },
        {
          "text": "$8$",
          "correct": true,
          "feedback": "Bonne réponse : un octet (en anglais *byte*) est un groupe\nde huit bits. Il peut représenter $2^8 = 256$ valeurs\ndifférentes.\n"
        },
        {
          "text": "$1$",
          "correct": false,
          "feedback": "Erreur : un seul bit ne forme pas un octet. Un bit est\nl'unité élémentaire d'information.\n"
        },
        {
          "text": "$16$",
          "correct": false,
          "feedback": "Erreur : $16$ bits forment deux octets, soit un *short* ou\n*word* selon les architectures.\n"
        }
      ],
      "explanation": "Le nom *octet* renvoie directement à « huit ». Le mot anglais\n*byte* est utilisé dans la plupart des langages de\nprogrammation."
    },
    {
      "id": "q06",
      "difficulty": 1,
      "skills": [
        "intervalle",
        "octet"
      ],
      "title": "Plus grand entier naturel sur un octet",
      "statement": "Quel est le plus grand entier naturel que l'on peut représenter\nsur un octet (huit bits) ?",
      "options": [
        {
          "text": "$128$",
          "correct": false,
          "feedback": "Erreur : $128$ est le seuil entre nombres positifs et\nnégatifs en complément à deux, mais ce n'est pas le\nmaximum d'un entier naturel sur un octet.\n"
        },
        {
          "text": "$255$",
          "correct": true,
          "feedback": "Bonne réponse : sur huit bits, on peut coder les entiers\nnaturels de $0$ à $2^8 - 1 = 255$. Le maximum correspond à\n$11111111_2$.\n"
        },
        {
          "text": "$511$",
          "correct": false,
          "feedback": "Erreur : $511 = 2^9 - 1$ est le maximum sur **neuf** bits,\npas huit.\n"
        },
        {
          "text": "$256$",
          "correct": false,
          "feedback": "Erreur : un octet permet $256$ valeurs **différentes** (de\n$0$ à $255$), mais pas la valeur $256$ elle-même.\n"
        }
      ],
      "explanation": "Sur $n$ bits, on peut coder $2^n$ valeurs différentes, soit les\nentiers naturels de $0$ à $2^n - 1$. Pour $n = 8$, c'est de $0$\nà $255$."
    },
    {
      "id": "q07",
      "difficulty": 1,
      "skills": [
        "python",
        "prefixes"
      ],
      "title": "Préfixes des bases en Python",
      "statement": "En Python, quel préfixe utilise-t-on pour écrire un littéral\nhexadécimal ?",
      "options": [
        {
          "text": "`0o`",
          "correct": false,
          "feedback": "Erreur : `0o` est le préfixe pour l'**octal** (base $8$),\nrarement utilisé.\n"
        },
        {
          "text": "`0b`",
          "correct": false,
          "feedback": "Erreur : `0b` est le préfixe pour le **binaire** (par\nexemple `0b101 == 5`).\n"
        },
        {
          "text": "`0h`",
          "correct": false,
          "feedback": "Erreur : `0h` n'est pas un préfixe valide en Python. Cela\nprovoquerait une erreur de syntaxe.\n"
        },
        {
          "text": "`0x`",
          "correct": true,
          "feedback": "Bonne réponse : `0x` introduit un littéral hexadécimal.\nPar exemple `0xFF == 255`.\n"
        }
      ],
      "explanation": "Python accepte trois préfixes : `0b` (binaire), `0o` (octal) et\n`0x` (hexadécimal). On peut aussi utiliser `int(\"FF\", 16)` pour\nconvertir une chaîne en entier dans une base donnée."
    },
    {
      "id": "q08",
      "difficulty": 1,
      "skills": [
        "hexadecimal",
        "regroupement"
      ],
      "title": "Bits par chiffre hexadécimal",
      "statement": "Combien de bits sont nécessaires pour coder un chiffre\nhexadécimal ?",
      "options": [
        {
          "text": "$8$",
          "correct": false,
          "feedback": "Erreur : huit bits forment un octet, ce qui correspond à\n**deux** chiffres hexadécimaux (de $00$ à $FF$).\n"
        },
        {
          "text": "$1$",
          "correct": false,
          "feedback": "Erreur : un seul bit ne permet de coder que deux valeurs\n($0$ et $1$). Or l'hexadécimal nécessite seize valeurs.\n"
        },
        {
          "text": "$4$",
          "correct": true,
          "feedback": "Bonne réponse : $2^4 = 16$, donc quatre bits suffisent à\ncoder les seize valeurs hexadécimales. C'est ce qui rend\nla conversion entre hexadécimal et binaire si simple.\n"
        },
        {
          "text": "$16$",
          "correct": false,
          "feedback": "Erreur : confusion entre la base ($16$ symboles) et le\nnombre de bits requis. $4$ bits suffisent puisque\n$2^4 = 16$.\n"
        }
      ],
      "explanation": "Cette correspondance exacte (un chiffre hexa = quatre bits) est\ntrès pratique : pour convertir entre binaire et hexadécimal,\non regroupe simplement les bits par paquets de quatre, sans\ncalcul."
    },
    {
      "id": "q09",
      "difficulty": 1,
      "skills": [
        "hexadecimal",
        "symbole"
      ],
      "title": "Lecture d'un chiffre hexadécimal",
      "statement": "Quelle est la valeur décimale de la lettre $C$ utilisée comme\nchiffre hexadécimal ?",
      "options": [
        {
          "text": "$13$",
          "correct": false,
          "feedback": "Erreur : $13$ correspond à la lettre $D$. La lettre $C$\nvient juste avant, donc vaut $12$.\n"
        },
        {
          "text": "$12$",
          "correct": true,
          "feedback": "Bonne réponse : les lettres A, B, C, D, E, F valent\nrespectivement $10, 11, 12, 13, 14, 15$.\n"
        },
        {
          "text": "$11$",
          "correct": false,
          "feedback": "Erreur : $11$ correspond à la lettre $B$. La lettre $C$\nvient juste après, donc vaut $12$.\n"
        },
        {
          "text": "$3$",
          "correct": false,
          "feedback": "Erreur : confusion possible avec la position de C dans\nl'alphabet. En hexadécimal, A vaut $10$, B vaut $11$, C\nvaut $12$, etc.\n"
        }
      ],
      "explanation": "Mémo : A vaut $10$ et chaque lettre suivante incrémente\nd'une unité, jusqu'à F qui vaut $15$."
    },
    {
      "id": "q10",
      "difficulty": 1,
      "skills": [
        "definition",
        "poids-fort"
      ],
      "title": "Bit de poids fort",
      "statement": "Que désigne le **bit de poids fort** dans la représentation\nbinaire d'un nombre ?",
      "options": [
        {
          "text": "Le bit le plus à gauche, qui correspond à la plus grande puissance de $2$",
          "correct": true,
          "feedback": "Bonne réponse : sur $n$ bits, le bit de poids fort est en\nposition $n-1$, avec un poids de $2^{n-1}$.\n"
        },
        {
          "text": "Le bit le plus à droite (de poids $2^0$)",
          "correct": false,
          "feedback": "Erreur : c'est le bit de poids **faible**. Le bit de poids\nfort est au contraire celui dont la position a la plus\ngrande valeur.\n"
        },
        {
          "text": "Le bit qui change le plus souvent quand on incrémente le nombre",
          "correct": false,
          "feedback": "Erreur : c'est au contraire le bit de poids **faible** qui\nchange à chaque incrément. Le bit de poids fort change le\nmoins souvent.\n"
        },
        {
          "text": "Le bit qui vaut systématiquement $1$",
          "correct": false,
          "feedback": "Erreur : un bit de poids fort peut valoir $0$ ou $1$,\ncomme tout autre bit.\n"
        }
      ],
      "explanation": "En complément à deux, le bit de poids fort joue un rôle\nparticulier : il indique le signe ($0$ pour positif, $1$ pour\nnégatif)."
    },
    {
      "id": "q11",
      "difficulty": 2,
      "skills": [
        "conversion",
        "binaire-decimal"
      ],
      "title": "Conversion binaire vers décimal sur huit bits",
      "statement": "Que vaut $01001101_2$ en base décimale ?",
      "options": [
        {
          "text": "$74$",
          "correct": false,
          "feedback": "Erreur de calcul : vérifier les puissances de $2$ associées\naux bits à $1$. On doit avoir $2^6 + 2^3 + 2^2 + 2^0$.\n"
        },
        {
          "text": "$77$",
          "correct": true,
          "feedback": "Bonne réponse : $01001101_2 = 64 + 8 + 4 + 1 = 77_{10}$.\nLes bits à $1$ sont aux positions $6, 3, 2, 0$.\n"
        },
        {
          "text": "$93$",
          "correct": false,
          "feedback": "Erreur : c'est $01011101_2$. Lire attentivement les bits.\n"
        },
        {
          "text": "$109$",
          "correct": false,
          "feedback": "Erreur : c'est $01101101_2$, pas $01001101_2$. Bien\nidentifier la position de chaque bit à $1$.\n"
        }
      ],
      "explanation": "Astuce : pour les conversions sur huit bits, mémoriser les\npuissances de $2$ jusqu'à $2^7 = 128$. La somme des bits à $1$\ndonne directement la valeur décimale."
    },
    {
      "id": "q12",
      "difficulty": 2,
      "skills": [
        "conversion",
        "hexadecimal-binaire"
      ],
      "title": "Conversion hexadécimal vers binaire",
      "statement": "Quelle est l'écriture binaire de $A3F_{16}$ ?",
      "options": [
        {
          "text": "$1010001111_2$",
          "correct": false,
          "feedback": "Erreur : il manque deux bits. Chaque chiffre hexadécimal\ndoit être codé sur exactement quatre bits, en complétant\npar des zéros à gauche si nécessaire.\n"
        },
        {
          "text": "$111000111101_2$",
          "correct": false,
          "feedback": "Erreur : vérifier la conversion de chaque chiffre.\nA → $1010$, pas $1110$.\n"
        },
        {
          "text": "$101000111111_2$",
          "correct": true,
          "feedback": "Bonne réponse : A → $1010$, $3$ → $0011$, F → $1111$.\nMis bout à bout : $1010\\ 0011\\ 1111_2$.\n"
        },
        {
          "text": "$111111000110_2$",
          "correct": false,
          "feedback": "Erreur : on a inversé l'ordre des chiffres. Lire de gauche\nà droite : A puis $3$ puis F.\n"
        }
      ],
      "explanation": "Un chiffre hexa = quatre bits. La conversion est purement\nmécanique : il suffit de remplacer chaque chiffre hexa par les\nquatre bits correspondants, dans l'ordre."
    },
    {
      "id": "q13",
      "difficulty": 2,
      "skills": [
        "addition-binaire"
      ],
      "title": "Addition binaire avec retenue",
      "statement": "Que vaut $1011_2 + 0110_2$ (addition binaire sur quatre bits) ?",
      "options": [
        {
          "text": "$0001_2$",
          "correct": false,
          "feedback": "Erreur : on ne peut pas obtenir un nombre plus petit que\n$1011$ en lui ajoutant un nombre positif. Vérifier la\nretenue.\n"
        },
        {
          "text": "$0101_2$",
          "correct": false,
          "feedback": "Erreur : confusion possible avec un XOR (différence) au\nlieu d'une addition.\n"
        },
        {
          "text": "$1101_2$",
          "correct": false,
          "feedback": "Erreur : confusion possible entre OU logique et addition.\nL'addition propage des retenues, contrairement au OU.\n"
        },
        {
          "text": "$10001_2$",
          "correct": true,
          "feedback": "Bonne réponse : $1011 + 0110 = 10001_2$ (en posant l'addition\ncolonne par colonne, avec retenues). Vérification :\n$11 + 6 = 17 = 16 + 1 = 10001_2$.\n"
        }
      ],
      "explanation": "L'addition binaire suit les mêmes règles que l'addition\ndécimale, avec retenues : $0+0 = 0$, $0+1 = 1$, $1+1 = 10$\n(retenue), $1+1+1 = 11$ (retenue). Si le résultat sort de\nl'intervalle de codage, on parle de dépassement."
    },
    {
      "id": "q14",
      "difficulty": 2,
      "skills": [
        "intervalle",
        "complement-deux"
      ],
      "title": "Intervalle de codage en complément à deux",
      "statement": "Sur huit bits en complément à deux, quel est l'intervalle des\nentiers relatifs codables ?",
      "options": [
        {
          "text": "$[-128\\,;\\, 127]$",
          "correct": true,
          "feedback": "Bonne réponse : sur $n = 8$ bits, l'intervalle est\n$[-2^{n-1}\\,;\\, 2^{n-1} - 1] = [-128\\,;\\, 127]$.\n"
        },
        {
          "text": "$[-128\\,;\\, 128]$",
          "correct": false,
          "feedback": "Erreur : la valeur $128$ ne peut pas être codée car\n$10000000_2$ vaut $-128$ en complément à deux.\n"
        },
        {
          "text": "$[-127\\,;\\, 127]$",
          "correct": false,
          "feedback": "Erreur : il y a un négatif de plus que de positifs. La\nplus petite valeur est $-128$, pas $-127$.\n"
        },
        {
          "text": "$[0\\,;\\, 255]$",
          "correct": false,
          "feedback": "Erreur : c'est l'intervalle des entiers **naturels**\n(non signés) sur huit bits.\n"
        }
      ],
      "explanation": "Sur $n$ bits en complément à deux, l'intervalle est\n$[-2^{n-1}\\,;\\, 2^{n-1} - 1]$. La dissymétrie (un négatif de\nplus) vient du fait que $0$ est compté côté positif."
    },
    {
      "id": "q15",
      "difficulty": 2,
      "skills": [
        "complement-deux",
        "calcul"
      ],
      "title": "Calcul du complément à deux",
      "statement": "Quelle est la représentation binaire de $-19$ sur huit bits, en\ncomplément à deux ?",
      "options": [
        {
          "text": "$11101101$",
          "correct": true,
          "feedback": "Bonne réponse : étape par étape, $19 = 00010011$, on\ninverse → $11101100$, on ajoute $1$ → $11101101$.\n"
        },
        {
          "text": "$11101100$",
          "correct": false,
          "feedback": "Erreur : c'est le complément à un (inversion des bits)\nmais on a oublié l'étape finale d'ajouter $1$.\n"
        },
        {
          "text": "$11101110$",
          "correct": false,
          "feedback": "Erreur : on a ajouté $2$ au lieu de $1$ après inversion,\nou on a inversé un bit de plus.\n"
        },
        {
          "text": "$10010011$",
          "correct": false,
          "feedback": "Erreur : c'est la **représentation naïve** (signe + valeur\nabsolue), qui n'est pas le complément à deux. Cette\nnotation a des défauts qui justifient justement le\ncomplément à deux.\n"
        }
      ],
      "explanation": "Les trois étapes du complément à deux : (1) écrire la valeur\nabsolue en binaire, (2) inverser tous les bits (complément à\nun), (3) ajouter $1$. Cela revient à calculer $2^n - |x|$."
    },
    {
      "id": "q16",
      "difficulty": 2,
      "skills": [
        "complement-deux",
        "lecture"
      ],
      "title": "Lecture d'un nombre négatif",
      "statement": "Que vaut $11111101_2$ interprété en complément à deux sur huit\nbits ?",
      "options": [
        {
          "text": "$-125$",
          "correct": false,
          "feedback": "Erreur : confusion possible. Vérifier en posant l'addition\n$00000011 + 11111101$ : si on obtient $00000000$ (avec\nretenue ignorée), c'est bien $3$ et $-3$.\n"
        },
        {
          "text": "$-253$",
          "correct": false,
          "feedback": "Erreur : on a oublié que la valeur absolue se déduit en\nappliquant à nouveau le complément à deux, pas en lisant\nla magnitude restante.\n"
        },
        {
          "text": "$253$",
          "correct": false,
          "feedback": "Erreur : c'est la lecture comme entier **naturel**. Or le\nbit de poids fort à $1$ indique un nombre négatif en\ncomplément à deux.\n"
        },
        {
          "text": "$-3$",
          "correct": true,
          "feedback": "Bonne réponse : on inverse → $00000010$, on ajoute $1$ →\n$00000011 = 3$, le bit de poids fort à $1$ donne le signe\nnégatif. Donc $-3$.\n"
        }
      ],
      "explanation": "Méthode : si le bit de poids fort vaut $1$, le nombre est\nnégatif. On retrouve sa valeur absolue en appliquant à\nnouveau le complément à deux (inversion + $1$)."
    },
    {
      "id": "q17",
      "difficulty": 2,
      "skills": [
        "hexadecimal",
        "application"
      ],
      "title": "Couleurs HTML en hexadécimal",
      "statement": "En CSS, la couleur `#FF5733` est codée en hexadécimal sur six\nchiffres. Que vaut la composante rouge en décimal ?",
      "options": [
        {
          "text": "$33$",
          "correct": false,
          "feedback": "Erreur : confusion entre la lecture décimale et\nhexadécimale. $33_{16} = 3 \\cdot 16 + 3 = 51_{10}$.\n"
        },
        {
          "text": "$87$",
          "correct": false,
          "feedback": "Erreur : $87$ correspond à la composante verte $57_{16}$.\n"
        },
        {
          "text": "$255$",
          "correct": true,
          "feedback": "Bonne réponse : la composante rouge est $FF_{16}$, soit\n$15 \\cdot 16 + 15 = 255_{10}$. C'est le maximum possible\npour une composante.\n"
        },
        {
          "text": "$51$",
          "correct": false,
          "feedback": "Erreur : $51$ correspond à la composante bleue $33_{16}$.\nLes composantes sont dans l'ordre RVB (rouge, vert, bleu).\n"
        }
      ],
      "explanation": "Une couleur RVB sur huit bits par composante prend la forme\n`#RRVVBB` où chaque paire de chiffres hexa code une valeur\nentre $00$ et $FF$ ($0$ et $255$). Ici : rouge = $FF = 255$,\nvert = $57 = 87$, bleu = $33 = 51$."
    },
    {
      "id": "q18",
      "difficulty": 2,
      "skills": [
        "denombrement",
        "intervalle"
      ],
      "title": "Nombre de valeurs codables",
      "statement": "Combien de valeurs différentes peut-on représenter sur $n$ bits ?",
      "options": [
        {
          "text": "$n$",
          "correct": false,
          "feedback": "Erreur : confusion entre le nombre de bits et le nombre de\nvaleurs. Avec $1$ bit on a $2$ valeurs, avec $2$ bits on\nen a $4$, pas $2$.\n"
        },
        {
          "text": "$2 \\cdot n$",
          "correct": false,
          "feedback": "Erreur : la croissance n'est pas linéaire mais\n**exponentielle**. Chaque bit supplémentaire double le\nnombre de valeurs possibles.\n"
        },
        {
          "text": "$2^n$",
          "correct": true,
          "feedback": "Bonne réponse : chaque bit pouvant prendre deux valeurs\nindépendamment des autres, $n$ bits permettent\n$2 \\times 2 \\times \\cdots \\times 2 = 2^n$ combinaisons.\n"
        },
        {
          "text": "$n^2$",
          "correct": false,
          "feedback": "Erreur : la croissance n'est pas polynomiale mais\nexponentielle. Pour $n = 10$, on a $2^{10} = 1024$, pas\n$100$.\n"
        }
      ],
      "explanation": "Cette croissance exponentielle explique pourquoi les\nprocesseurs $64$ bits ($2^{64}$ adresses possibles) couvrent\ntoute la mémoire imaginable, alors que les processeurs $32$\nbits ($\\approx 4 \\cdot 10^9$ adresses) sont déjà saturés pour\nla mémoire moderne."
    },
    {
      "id": "q19",
      "difficulty": 2,
      "skills": [
        "complement-deux",
        "astuce"
      ],
      "title": "Astuce rapide du complément à deux",
      "statement": "Pour calculer rapidement le complément à deux d'un nombre, on\nparcourt ses bits **de droite à gauche**. Que fait-on ?",
      "options": [
        {
          "text": "On ajoute $1$ à chaque bit individuellement",
          "correct": false,
          "feedback": "Erreur : ce n'est pas une opération sensée en binaire\n(chaque bit ne vaut que $0$ ou $1$).\n"
        },
        {
          "text": "On inverse tous les bits sans exception",
          "correct": false,
          "feedback": "Erreur : c'est le complément à **un**. L'astuce du\ncomplément à deux laisse une partie des bits inchangée.\n"
        },
        {
          "text": "On garde les bits jusqu'au premier $1$ inclus, puis on inverse les bits suivants",
          "correct": true,
          "feedback": "Bonne réponse : on conserve la partie droite (zéros et le\npremier $1$) et on inverse tout le reste à gauche. Cela\névite les étapes intermédiaires.\n"
        },
        {
          "text": "On inverse les bits jusqu'au premier $1$, puis on garde les suivants",
          "correct": false,
          "feedback": "Erreur : c'est l'inverse de la bonne règle. On commence par\n**garder** la partie droite, puis on inverse à gauche.\n"
        }
      ],
      "explanation": "Exemple : $20 = 00010100$. On garde « ...100 » (jusqu'au\npremier $1$ depuis la droite) et on inverse le reste :\n$11101100 = -20$. Cette astuce évite l'étape « inversion +\naddition de $1$ »."
    },
    {
      "id": "q20",
      "difficulty": 2,
      "skills": [
        "complement-deux",
        "asymetrie"
      ],
      "title": "Asymétrie positifs/négatifs",
      "statement": "Pourquoi y a-t-il un négatif de plus que de positifs en\ncomplément à deux ?",
      "options": [
        {
          "text": "Parce que le complément à deux gaspille un code",
          "correct": false,
          "feedback": "Erreur : au contraire, le complément à deux n'a pas de\ndouble représentation du zéro, il utilise donc tous les\ncodes possibles.\n"
        },
        {
          "text": "Parce que la représentation est moins efficace pour les positifs",
          "correct": false,
          "feedback": "Erreur : la représentation est efficace symétrique pour la\nplupart des opérations. La dissymétrie tient à un autre\nphénomène.\n"
        },
        {
          "text": "Parce que $0$ est compté du côté des positifs et n'a qu'une seule représentation",
          "correct": true,
          "feedback": "Bonne réponse : sur $n$ bits, on a $2^n$ codes différents,\ndont une moitié pour les négatifs et une moitié pour les\npositifs. Comme $0$ est compté avec les positifs, il y en\na un de moins côté positif.\n"
        },
        {
          "text": "Parce que les nombres négatifs prennent plus de bits",
          "correct": false,
          "feedback": "Erreur : tous les codes ont la même longueur en bits.\nC'est la convention de signe qui crée la dissymétrie.\n"
        }
      ],
      "explanation": "Sur huit bits, on a $256$ codes : $128$ pour les non négatifs\n($0, 1, \\ldots, 127$) et $128$ pour les négatifs\n($-128, -127, \\ldots, -1$). C'est une particularité du\ncomplément à deux qu'il faut connaître."
    },
    {
      "id": "q21",
      "difficulty": 3,
      "skills": [
        "depassement",
        "complement-deux"
      ],
      "title": "Dépassement de capacité",
      "statement": "Sur huit bits en complément à deux, que renvoie l'addition\n$127 + 1$ ?",
      "options": [
        {
          "text": "$0$",
          "correct": false,
          "feedback": "Erreur : confusion possible avec une remise à zéro après\ndébordement, qui se produit pour les entiers non signés\n($255 + 1 = 0$ mod $256$). Ici, on est en signé.\n"
        },
        {
          "text": "$-128$",
          "correct": true,
          "feedback": "Bonne réponse : $01111111 + 00000001 = 10000000$. Or sur\nhuit bits en complément à deux, $10000000_2 = -128$. Il y\na dépassement de capacité (*overflow*).\n"
        },
        {
          "text": "Une erreur Python",
          "correct": false,
          "feedback": "Erreur : Python n'a pas de limite de taille des entiers,\ndonc cette question concerne les langages à entiers de\ntaille fixe (C, Java, etc.). En Python, $127 + 1 = 128$\nsans souci.\n"
        },
        {
          "text": "$128$",
          "correct": false,
          "feedback": "Erreur : $128$ n'est pas représentable sur huit bits en\ncomplément à deux (l'intervalle s'arrête à $127$). Le\nrésultat est donc « tordu ».\n"
        }
      ],
      "explanation": "Le dépassement est un piège classique en C/Java. En complément\nà deux, l'incrément du plus grand positif donne le plus petit\nnégatif. C'est la cause de bugs célèbres (faille de\nl'algorithme de tri, débordement dans les calculs financiers)."
    },
    {
      "id": "q22",
      "difficulty": 3,
      "skills": [
        "naive",
        "complement-deux",
        "comparaison"
      ],
      "title": "Défaut de la représentation naïve",
      "statement": "Pourquoi n'utilise-t-on pas la **représentation naïve** (bit de\npoids fort = signe, autres bits = valeur absolue) pour coder\nles entiers relatifs ?",
      "options": [
        {
          "text": "Parce qu'elle ne permet pas de coder les nombres négatifs",
          "correct": false,
          "feedback": "Erreur : elle code bien les négatifs, mais avec deux\ndéfauts qui la rendent peu pratique.\n"
        },
        {
          "text": "Parce qu'elle utilise plus de bits que le complément à deux",
          "correct": false,
          "feedback": "Erreur : les deux représentations utilisent le même nombre\nde bits.\n"
        },
        {
          "text": "Parce que l'addition binaire usuelle ne donne pas le bon résultat sur les négatifs",
          "correct": true,
          "feedback": "Bonne réponse : avec la représentation naïve, on ne peut\nplus utiliser l'additionneur standard pour les\nsoustractions. Le complément à deux résout ce problème :\nle **même circuit** d'addition fonctionne pour positifs et\nnégatifs.\n"
        },
        {
          "text": "Parce qu'elle est plus lente à interpréter",
          "correct": false,
          "feedback": "Erreur : la lecture est en réalité **plus simple** (signe\n+ valeur absolue). Le problème est ailleurs : dans\nl'arithmétique.\n"
        }
      ],
      "explanation": "C'est précisément pour pouvoir réutiliser le circuit\nd'addition standard que les processeurs adoptent le complément\nà deux. La représentation naïve aurait aussi le défaut d'avoir\ndeux représentations du zéro ($+0$ et $-0$)."
    },
    {
      "id": "q23",
      "difficulty": 3,
      "skills": [
        "complement-un",
        "complement-deux"
      ],
      "title": "Différence entre complément à un et complément à deux",
      "statement": "En quoi le **complément à deux** diffère-t-il du **complément à un** ?",
      "options": [
        {
          "text": "Le complément à un est calculé sur deux bits, le complément à deux sur deux octets",
          "correct": false,
          "feedback": "Erreur : confusion sur les noms. Aucune des deux\nappellations ne renvoie au nombre de bits.\n"
        },
        {
          "text": "Le complément à deux n'utilise pas le bit de poids fort comme signe",
          "correct": false,
          "feedback": "Erreur : au contraire, le bit de poids fort sert de\nsigne en complément à deux ($0$ pour positif, $1$ pour\nnégatif).\n"
        },
        {
          "text": "Le complément à un ne fonctionne que pour les nombres positifs",
          "correct": false,
          "feedback": "Erreur : le complément à un peut s'appliquer à n'importe\nquel motif binaire ; c'est juste une inversion de bits.\n"
        },
        {
          "text": "Le complément à un inverse tous les bits ; le complément à deux inverse tous les bits puis ajoute $1$",
          "correct": true,
          "feedback": "Bonne réponse : le complément à un est l'étape\nintermédiaire de l'opération du complément à deux. Le « $+1$ »\nfinal corrige la double représentation du zéro qui\nsubsisterait sans cette correction.\n"
        }
      ],
      "explanation": "Le complément à un (inversion seule) crée deux représentations\ndu zéro ($00\\ldots0$ et $11\\ldots1$). L'ajout du « $+1$ » du\ncomplément à deux fait fusionner ces deux zéros et permet\nd'utiliser l'arithmétique standard sans correction."
    },
    {
      "id": "q24",
      "difficulty": 3,
      "skills": [
        "cas-particulier",
        "complement-deux"
      ],
      "title": "Cas particulier de la valeur minimum",
      "statement": "Sur huit bits en complément à deux, à quoi correspond le motif\n$10000000_2$ ?",
      "options": [
        {
          "text": "$0$",
          "correct": false,
          "feedback": "Erreur : $0$ est codé $00000000$. Le motif $10000000$ est\nla plus petite valeur signée.\n"
        },
        {
          "text": "$-127$",
          "correct": false,
          "feedback": "Erreur : la valeur $-127$ correspond à $10000001_2$. Le\nmotif $10000000$ correspond à un cas un peu spécial.\n"
        },
        {
          "text": "$-128$",
          "correct": true,
          "feedback": "Bonne réponse : $-128 = -2^{n-1} = -2^7$. C'est la valeur\nminimum codable sur huit bits en complément à deux. Cette\nvaleur n'a pas d'opposé représentable (il n'y a pas\n$+128$).\n"
        },
        {
          "text": "$128$",
          "correct": false,
          "feedback": "Erreur : $128$ n'est pas représentable sur huit bits en\ncomplément à deux (l'intervalle s'arrête à $127$).\n"
        }
      ],
      "explanation": "Cette valeur est piégeuse : son opposé $+128$ n'existe pas en\nhuit bits signés. Calculer $-(-128)$ provoque un dépassement\nqui ramène à $-128$ lui-même. C'est une source classique de\nbugs en C ou Java."
    },
    {
      "id": "q25",
      "difficulty": 3,
      "skills": [
        "python",
        "precision-arbitraire"
      ],
      "title": "Entiers en Python vs en C",
      "statement": "En Python, l'expression `2 ** 100` donne un nombre entier\nexact, alors qu'en C ou en Java elle provoquerait un\ndépassement. Pourquoi ?",
      "options": [
        {
          "text": "Python utilise des nombres flottants pour tous les calculs entiers",
          "correct": false,
          "feedback": "Erreur : Python distingue bien les entiers (`int`) des\nflottants (`float`). $2^{100}$ est calculé comme un entier\nexact, pas approché.\n"
        },
        {
          "text": "Python tronque silencieusement les entiers trop grands",
          "correct": false,
          "feedback": "Erreur : aucune troncature. Le résultat est exact, même\npour des nombres immenses.\n"
        },
        {
          "text": "Python fait des calculs modulo $2^{64}$",
          "correct": false,
          "feedback": "Erreur : c'est le comportement de C/Java sur entiers\n$64$ bits. Python n'a pas de modulo implicite.\n"
        },
        {
          "text": "Python adapte automatiquement la mémoire allouée aux entiers, sans limite fixe",
          "correct": true,
          "feedback": "Bonne réponse : les entiers Python sont en **précision\narbitraire**. L'interpréteur réserve autant de mémoire que\nnécessaire pour représenter le nombre exactement.\n"
        }
      ],
      "explanation": "Cette caractéristique est un atout pédagogique de Python :\nl'élève n'a pas à se soucier des limites de codage. Mais cela\na un coût : les opérations sur de très grands entiers sont\nplus lentes que sur des entiers de taille fixe."
    },
    {
      "id": "q26",
      "difficulty": 2,
      "skills": [
        "conversion",
        "decimal-hexadecimal"
      ],
      "title": "Conversion décimal vers hexadécimal",
      "statement": "Quelle est l'écriture hexadécimale de l'entier $195$ ?",
      "options": [
        {
          "text": "$\\text{C3}_{16}$",
          "correct": true,
          "feedback": "Bonne réponse : $195 = 12 \\times 16 + 3$. Le quotient $12$\ns'écrit $\\text{C}$ et le reste $3$ s'écrit $3$, d'où\n$\\text{C3}_{16}$.\n"
        },
        {
          "text": "$\\text{C5}_{16}$",
          "correct": false,
          "feedback": "Erreur sur le reste : $195 - 12 \\times 16 = 195 - 192 = 3$\n(et non $5$). Bien vérifier la soustraction finale qui\ndonne le dernier chiffre.\n"
        },
        {
          "text": "$\\text{3C}_{16}$",
          "correct": false,
          "feedback": "Erreur : les chiffres ont été inversés. Le quotient se\nlit en premier (à gauche), suivi du reste à droite. Le\nbon résultat est $\\text{C3}_{16}$.\n"
        },
        {
          "text": "$\\text{A3}_{16}$",
          "correct": false,
          "feedback": "Erreur sur le quotient : on a pris la lettre $\\text{A}$\n(qui vaut $10$) au lieu de $\\text{C}$ (qui vaut $12$). Or\n$195 \\div 16 = 12$ reste $3$, donc le chiffre des\n« seize » est bien $\\text{C}$.\n"
        }
      ],
      "explanation": "Méthode des divisions successives par $16$ : tant que le\nquotient n'est pas nul, on note le reste et on continue avec\nle quotient. Ici, $195 \\div 16 = 12$ reste $3$, puis\n$12 \\div 16 = 0$ reste $12$ ($\\text{C}$). On lit les restes\ndu dernier au premier : $\\text{C3}_{16}$."
    },
    {
      "id": "q27",
      "difficulty": 2,
      "skills": [
        "intervalle",
        "dimensionnement"
      ],
      "title": "Nombre minimum de bits",
      "statement": "Combien de bits sont nécessaires au minimum pour coder en\nbinaire l'entier naturel $287$ ?",
      "options": [
        {
          "text": "$9$",
          "correct": true,
          "feedback": "Bonne réponse : on cherche le plus petit $n$ tel que\n$2^n > 287$. Or $2^8 = 256$ (insuffisant) et $2^9 = 512$\n(suffisant), donc $n = 9$.\n"
        },
        {
          "text": "$7$",
          "correct": false,
          "feedback": "Erreur : sur $7$ bits, on peut coder les entiers de $0$\nà $2^7 - 1 = 127$. Or $287 > 127$, donc $7$ bits ne\nsuffisent pas.\n"
        },
        {
          "text": "$8$",
          "correct": false,
          "feedback": "Erreur : sur $8$ bits, on couvre l'intervalle\n$[0\\,;\\, 2^8 - 1] = [0\\,;\\, 255]$. Comme $287 > 255$, un\noctet est encore insuffisant.\n"
        },
        {
          "text": "$10$",
          "correct": false,
          "feedback": "Erreur : $10$ bits suffisent largement (ils couvrent\njusqu'à $1023$), mais ce n'est pas le **minimum**. Avec\n$9$ bits, on atteint déjà $511$, ce qui est suffisant\npour $287$.\n"
        }
      ],
      "explanation": "Méthode : chercher le plus petit $n$ tel que $2^n - 1 \\geq 287$,\nou de façon équivalente $2^n \\geq 288$. Ici, $2^8 = 256$ et\n$2^9 = 512$, donc le minimum est $n = 9$. De manière plus\nformelle, ce nombre est $\\lceil \\log_2(287 + 1) \\rceil = 9$."
    },
    {
      "id": "q28",
      "difficulty": 2,
      "skills": [
        "python",
        "decalage-binaire"
      ],
      "title": "Décalage binaire à gauche",
      "statement": "En Python, que vaut l'expression `12 << 2` ?",
      "options": [
        {
          "text": "$14$",
          "correct": false,
          "feedback": "Erreur : on a interprété `<<` comme une addition\n($12 + 2 = 14$). Or l'opérateur `<<` est un **décalage de\nbits**, pas une addition.\n"
        },
        {
          "text": "$48$",
          "correct": true,
          "feedback": "Bonne réponse : `n << k` décale les bits de $n$ de $k$\npositions vers la gauche, ce qui équivaut à multiplier\npar $2^k$. Ici, $12 \\times 2^2 = 12 \\times 4 = 48$.\n"
        },
        {
          "text": "$24$",
          "correct": false,
          "feedback": "Erreur : on a multiplié par $2$ une seule fois.\nL'opérateur `<<` décale de $2$ positions, ce qui revient\nà multiplier par $2^2 = 4$, pas par $2$.\n"
        },
        {
          "text": "$3$",
          "correct": false,
          "feedback": "Erreur : on a effectué un décalage à **droite** (`>>`),\nqui correspond à une division entière par $2^k$, soit\n$12 // 4 = 3$. Ici, c'est `<<` qui décale à **gauche**.\n"
        }
      ],
      "explanation": "L'opérateur `<<` (décalage à gauche) déplace tous les bits\nvers la gauche, en complétant à droite par des zéros. Sur\nl'écriture binaire de $12 = 1100_2$, deux décalages donnent\n$110000_2 = 48$. C'est l'équivalent rapide de la\nmultiplication par $2^k$ ; l'opérateur inverse `>>` divise\nentièrement par $2^k$."
    },
    {
      "id": "q29",
      "difficulty": 2,
      "skills": [
        "intervalle",
        "dimensionnement"
      ],
      "title": "Plus grand entier non signé sur 32 bits",
      "statement": "Quel est le plus grand entier naturel (non signé) que l'on\npeut représenter sur $32$ bits ?",
      "options": [
        {
          "text": "$2 \\times 32$",
          "correct": false,
          "feedback": "Erreur : la quantité de valeurs codables croît de façon\n**exponentielle**, pas linéaire. Chaque bit\nsupplémentaire double le nombre de valeurs possibles.\n"
        },
        {
          "text": "$2^{32} - 1$",
          "correct": true,
          "feedback": "Bonne réponse : sur $n$ bits, le plus grand entier\nnaturel codable est $2^n - 1$. Pour $n = 32$, cela vaut\n$4\\,294\\,967\\,295$, soit environ $4{,}3 \\times 10^9$.\n"
        },
        {
          "text": "$2^{16}$",
          "correct": false,
          "feedback": "Erreur : $2^{16} - 1 = 65\\,535$ est le maximum sur $16$\nbits, pas sur $32$. Doubler le nombre de bits élève le\nmaximum à un carré (à un près), pas en double.\n"
        },
        {
          "text": "$2^{32}$",
          "correct": false,
          "feedback": "Erreur : on peut représenter $2^{32}$ valeurs\n**différentes** (de $0$ à $2^{32} - 1$), mais la valeur\n$2^{32}$ elle-même nécessiterait $33$ bits.\n"
        }
      ],
      "explanation": "Sur $n$ bits, l'intervalle des entiers naturels codables est\n$[0\\,;\\, 2^n - 1]$. Pour $32$ bits, cela donne environ\n$4{,}3$ milliards de valeurs, ce qui correspond\nhistoriquement à la limite de $4$ Go pour la mémoire vive\nadressable directement par un processeur $32$ bits."
    }
  ]
}