TD2 : bases et codage des entiers, 14 exercices corrigés

Les 14 exercices du TD 2 « Bases et changements de base », consacré aux bases et au codage des entiers, sont réunis sur cette seule page, dans l’ordre du document. Chaque énoncé est suivi d’une correction détaillée à déplier.

Énoncés reformulés à partir du support de l’Université de Lille, Licence Informatique première année, 2020-2021. Toutes les valeurs et sous-questions sont conservées. Les calculs sont vérifiés par programme ; les démonstrations sont expliquées pas à pas.

Conventions : un indice indique la base ; A = 10, B = 11, puis C = 12 jusqu’à G = 16. Une base est un entier au moins égal à 2. Mo et Go utilisent les puissances de 10 ; Mio et Gio, celles de 2. Une écriture invalide est signalée, sans modifier l’énoncé.

14 exercices entièrement corrigésRevoir le cours

Partie 1Bases de numération

Exercice 1-1 : De la base b à la base 10

Pour chaque écriture, vérifier les chiffres autorisés puis déterminer sa valeur décimale : AB01212, AB0127, 640127 et AB275. Enfin, dire si l'entier décimal 15787 est divisible par 7.

Voir le corrigéMasquer le corrigé
Principe de position. Dans une base entière b ≥ 2, chaque chiffre doit avoir une valeur comprise entre 0 et b − 1. Depuis la droite, les positions valent 1, b, b², b³, etc. Nous utilisons la convention A = 10 et B = 11. L'indice indique la base ; il ne fait pas partie du nombre.

1. AB012 en base 12

Les cinq chiffres sont autorisés, car leur valeur est inférieure à 12. On développe chaque position, y compris celle dont le chiffre est nul :

10 × 12⁴ + 11 × 12³ + 0 × 12² + 1 × 12 + 2
= 207360 + 19008 + 0 + 12 + 2 = 226382.

Le zéro ne disparaît pas de l'écriture : il maintient les autres chiffres à leurs bonnes positions. Écrire AB12 au lieu de AB012 changerait donc la valeur.

2. AB012 en base 7 : écriture invalide

En base 7, seuls les chiffres 0, 1, 2, 3, 4, 5 et 6 sont admis. A et B correspondent à 10 et 11 : ils sont interdits. Cette écriture n'a donc pas de valeur comme représentation usuelle en base 7. Calculer malgré tout un polynôme avec les coefficients 10 et 11 ne rendrait pas cette écriture valide. La vérification des chiffres doit précéder le calcul.

3. 64012 en base 7

Tous les chiffres sont autorisés. On obtient 6 × 7⁴ + 4 × 7³ + 0 × 7² + 1 × 7 + 2 = 14406 + 1372 + 7 + 2 = 15787.

4. AB2 en base 75

Une base supérieure à 36 exige normalement un alphabet plus vaste que les chiffres et les lettres latines. Pour cette écriture particulière, seuls A, B et 2 interviennent : annoncer leurs valeurs suffit. Elles sont bien inférieures à 75. Le calcul donne 10 × 75² + 11 × 75 + 2 = 56250 + 825 + 2 = 57077. Le 75 est l'indice de base, pas un suffixe « 75 » à ajouter aux chiffres AB2.

5. Divisibilité de 15787 par 7

La division donne 15787 = 7 × 2255 + 2. Le reste n'est pas nul : ce nombre n'est pas un multiple de 7. La question précédente permet aussi de répondre sans division : 15787 = 640127. Tous les termes du développement sauf le dernier sont des multiples de 7 ; le dernier chiffre donne donc le reste, ici 2.

Exercice 1-2 : De la base 10 à la base b

Convertir les trois entiers décimaux 235, 8080 et 2325 successivement en base 3, en base 8 et en base 17.

Voir le corrigéMasquer le corrigé
Divisions successives. Diviser un entier N par b donne N = bq + r, avec 0 ≤ r < b. Le reste r est le chiffre de droite. On recommence avec le quotient q jusqu'à obtenir zéro. Les restes se lisent dans l'ordre inverse de leur apparition, du dernier vers le premier.

Pour la base 17, les valeurs 10 à 16 s'écrivent A, B, C, D, E, F, G. Il faut donc distinguer une valeur de reste, par exemple 14, du symbole qui l'écrit, ici E. En base 3, les seuls restes possibles sont 0, 1 et 2 ; en base 8, ils vont de 0 à 7.

Les neuf conversions
DécimalBase 3Base 8Base 17
23522201353DE
8080102002021176201AG5
232510012010442580D

235 en base 3 : 22201

Divisions par 3 ; lire les restes du bas vers le haut
NombreQuotientResteChiffre
2357811
782600
26822
8222
2022

8080 en base 3 : 102002021

Divisions par 3 ; lire les restes du bas vers le haut
NombreQuotientResteChiffre
8080269311
269389722
89729900
2999922
993300
331100
11322
3100
1011

2325 en base 3 : 10012010

Divisions par 3 ; lire les restes du bas vers le haut
NombreQuotientResteChiffre
232577500
77525811
2588600
862822
28911
9300
3100
1011

235 en base 8 : 353

Divisions par 8 ; lire les restes du bas vers le haut
NombreQuotientResteChiffre
2352933
29355
3033

8080 en base 8 : 17620

Divisions par 8 ; lire les restes du bas vers le haut
NombreQuotientResteChiffre
8080101000
101012622
1261566
15177
1011

2325 en base 8 : 4425

Divisions par 8 ; lire les restes du bas vers le haut
NombreQuotientResteChiffre
232529055
2903622
36444
4044

235 en base 17 : DE

Divisions par 17 ; lire les restes du bas vers le haut
NombreQuotientResteChiffre
2351314E
13013D

8080 en base 17 : 1AG5

Divisions par 17 ; lire les restes du bas vers le haut
NombreQuotientResteChiffre
808047555
4752716G
27110A
1011

2325 en base 17 : 80D

Divisions par 17 ; lire les restes du bas vers le haut
NombreQuotientResteChiffre
232513613D
136800
8088

Pourquoi faut-il remonter les restes ?

La première division isole les unités de la base choisie. La suivante isole le chiffre des paquets de b unités, puis vient celui des paquets de b² unités. Les chiffres sont donc obtenus du moins significatif au plus significatif. La lecture finale doit inverser cet ordre.

Pour 235 en base 3, les restes apparaissent comme 1, 0, 2, 2, 2. En remontant, on écrit 222013. Une vérification indépendante redéveloppe 2 × 3⁴ + 2 × 3³ + 2 × 3² + 0 × 3 + 1, ce qui redonne bien 235.

Pour 8080 en base 17, les restes sont 5, 16, 10, 1. Ils deviennent 5, G, A, 1, puis 1AG517 dans l'ordre de lecture. En particulier, il ne faut pas concaténer les écritures décimales « 16 » et « 10 » : chacune correspond à un seul chiffre dans cette base.

Les neuf conversions ci-dessus sont contrôlées en sens inverse par le programme de vérification : chaque écriture obtenue est relue dans sa base et doit redonner exactement l'entier initial.

Exercice 1-3 : Aliens, retrouver une base ou une contradiction

  1. Déterminer 6 × 6 si 5 × 5 s'écrit 21.
  2. Même question si 5 × 5 s'écrit 22.
  3. Sur Alpha du Centaure, l'égalité 61 × 43 = 3613 est donnée. Déterminer la base et discuter le nombre de doigts ou de tentacules.
  4. Sur Frolix VIII, 8 × 8 s'écrirait 42. Peut-on en déduire que les habitants sont symétriques ?
Voir le corrigéMasquer le corrigé

On suppose que tous les nombres d'une égalité utilisent une même base entière b, avec les valeurs habituelles des chiffres et la multiplication ordinaire. Sans cette hypothèse, une écriture extraterrestre arbitraire ne permettrait aucun calcul déterminé.

1. Si 5 × 5 = 21b

Le chiffre 5 impose b ≥ 6. À gauche, le produit vaut 25 en décimal. À droite, 21b vaut 2b + 1. Ainsi 25 = 2b + 1, donc b = 12. On cherche ensuite l'écriture de 36 dans cette base : 36 = 3 × 12 + 0, donc 6 × 6 = 3012. Le résultat demandé est une écriture en base 12, pas le nombre décimal trente.

2. Si 5 × 5 = 22b : aucune base entière

Cette fois, l'équation serait 25 = 2b + 2, donc b = 23/2 = 11,5. Or la numération étudiée exige une base entière. Une autre façon de voir le problème est que 2b + 2 est pair pour toute base entière, alors que 25 est impair. L'hypothèse est donc incompatible avec le cadre annoncé. On ne peut pas donner un résultat cohérent pour 6 × 6 sous cette hypothèse. Arrondir la base à 11 ou 12 changerait l'égalité.

3. Alpha du Centaure

On développe chaque écriture : (6b + 1)(4b + 3) = 3b³ + 6b² + b + 3. Le produit de gauche vaut 24b² + 22b + 3. En rassemblant les termes, on obtient :

3b³ − 18b² − 21b = 0
3b(b − 7)(b + 1) = 0.

Les racines 0 et −1 ne sont pas des bases admissibles. Il reste b = 7, qui autorise tous les chiffres présents. Vérification : 617 = 43 et 437 = 31 en décimal ; leur produit vaut 1333, comme 36137.

L'arithmétique révèle une numération en base 7. L'interprétation « sept doigts ou tentacules » demande une hypothèse culturelle supplémentaire : que la base corresponde au nombre d'appendices utilisés pour compter. Elle ne constitue pas une preuve d'anatomie.

4. Frolix VIII : une seconde incompatibilité

Le chiffre 8 impose b ≥ 9. L'égalité demanderait 64 = 4b + 2, soit b = 62/4 = 15,5. Aucune base entière ne convient. En effet, 64 est divisible par 4, tandis que 4b + 2 laisse toujours le reste 2. On ne peut donc rien conclure sur la symétrie des habitants à partir de cet énoncé. La correction conserve l'égalité fournie et signale son impossibilité ; elle ne la remplace pas par une égalité plus commode.

Exercice 1-4 : Conversions binaires, octales et hexadécimales

  1. Convertir 797 en bases 2, 8 et 16.
  2. Donner la valeur décimale de 79316.
  3. Passer de 22312014 à la base 16 sans étape décimale.
  4. Passer de A2B116 à la base 2 sans étape décimale.
Voir le corrigéMasquer le corrigé
Regroupement de bits. Comme 4 = 2², 8 = 2³ et 16 = 2⁴, un chiffre de base 4 correspond à deux bits, un chiffre octal à trois bits et un chiffre hexadécimal à quatre bits. Les groupes se forment depuis la droite, en complétant à gauche avec des zéros si nécessaire.

1. Trois écritures de 797

On décompose 797 = 512 + 256 + 16 + 8 + 4 + 1. Les positions correspondantes sont donc allumées en binaire. Les autres positions restent à zéro.

Binaire :      1100011101
Par trois :    001 100 011 101  → 1 4 3 5
Par quatre :   0011 0001 1101   → 3 1 D

79710 = 11000111012 = 14358 = 31D16.

Les zéros ajoutés en tête servent uniquement au regroupement. Ils ne modifient pas la valeur et ne sont pas nécessaires dans l'écriture finale.

2. Valeur de 79316

7 × 16² + 9 × 16 + 3 = 1792 + 144 + 3 = 1939. Ici, « 793 » est une suite de chiffres hexadécimaux ; ce n'est pas l'entier décimal 793.

3. De la base 4 à la base 16

On remplace chaque chiffre de base 4 par exactement deux bits : 0 → 00, 1 → 01, 2 → 10 et 3 → 11. Puis on regroupe par quatre :

2  2  3  1  2  0  1
10 10 11 01 10 00 01
0010 1011 0110 0001
  2    B    6    1

Le résultat est 2B6116. Aucune valeur décimale intermédiaire n'est nécessaire. On aurait aussi pu regrouper les chiffres de base 4 par deux depuis la droite, puisque 16 = 4².

4. De l'hexadécimal au binaire

A vaut 10 et B vaut 11. Chaque chiffre produit quatre bits : A → 1010, 2 → 0010, B → 1011 et 1 → 0001. On obtient 1010 0010 1011 00012. Il faut conserver les zéros des groupes intérieurs : écrire seulement « 10 » pour le chiffre 2 décalerait toutes les positions suivantes.

Exercice 1-5 : Parler binaire couramment

À partir des puissances de 2, écrire en binaire : 256, 512, 1024, puis 7, 31, 127, 511. Sans poser de longues opérations, déterminer ensuite 511 − 8, 127 − 24 et 512 + 48, d'abord en binaire puis en décimal.

Voir le corrigéMasquer le corrigé
Deux motifs à reconnaître. Le nombre 2ᵏ s'écrit avec un 1 suivi de k zéros. Le nombre 2ᵏ − 1 s'écrit avec k chiffres 1, car 1 + 2 + 4 + … + 2ᵏ⁻¹ = 2ᵏ − 1.
Les puissances de 2 de référence
PuissanceValeurPuissanceValeur
2^012^664
2^122^7128
2^242^8256
2^382^9512
2^4162^101024
2^5322^112048
Puissances de 2 et suites de 1
DécimalÉcriture binaire
256100000000
5121000000000
102410000000000
7111
3111111
1271111111
511111111111

Pour une puissance de 2, le nombre de chiffres est donc k + 1 et non k. Par exemple, 256 = 2⁸ comporte neuf chiffres dans son écriture binaire, même si huit zéros suivent son premier 1.

1. Calculer 511 − 8

511 = 2⁹ − 1 : ses neuf bits valent 1. Comme 8 = 2³, soustraire 8 revient ici à éteindre le bit de poids 8. Aucun emprunt n'est nécessaire, puisque ce bit était déjà à 1.

111111111
000001000  ← bit de poids 8 retiré
---------
111110111

Le résultat est 1111101112 = 50310. La deuxième ligne repère ce qu'on retire ; il s'agit d'une soustraction, pas d'un masque à appliquer dans toutes les situations.

2. Calculer 127 − 24

127 s'écrit avec sept 1. Or 24 = 16 + 8 = 2⁴ + 2³. Les deux bits correspondants sont présents dans 127 : on peut donc les remettre à zéro sans propagation d'emprunt. Ainsi 11111112 − 00110002 = 11001112 = 10310.

3. Calculer 512 + 48

512 allume seulement le bit de poids 2⁹. Les 48 unités allument les bits de poids 32 et 16. Ces positions ne se chevauchent pas, donc aucune retenue n'est produite. Le résultat est 10001100002 = 56010.

Limite de l'astuce : additionner des motifs en réunissant leurs bits n'est valable sans retenue que lorsque leurs positions à 1 sont disjointes. De même, éteindre directement un bit pour soustraire une puissance de 2 suppose que ce bit vaut déjà 1.

Exercice 1-6 : Compter les nombres à n chiffres

Soient une base entière b ≥ 2 et un entier n ≥ 1. Quels entiers naturels ont une écriture d'au plus n chiffres ? Combien sont-ils ? Reprendre la question pour une écriture comportant exactement n chiffres.

Voir le corrigéMasquer le corrigé
Convention indispensable. Nous utilisons l'écriture canonique : pas de zéro inutile à gauche, et zéro s'écrit « 0 », avec un chiffre. Si l'on autorisait le remplissage par des zéros, un même entier aurait plusieurs longueurs d'écriture ; la question n'aurait plus le même sens.

1. Au plus n chiffres

Le plus petit entier naturel est 0. Le plus grand s'obtient en plaçant le chiffre maximal b − 1 dans chacune des n positions :

(b − 1)(1 + b + b² + … + bⁿ⁻¹) = bⁿ − 1.

Les valeurs possibles sont donc tous les entiers de 0 à bⁿ − 1 inclus. Le nombre d'entiers dans cet intervalle est (bⁿ − 1) − 0 + 1 = bⁿ. On retrouve ce total en considérant n positions ayant chacune b choix, puis en supprimant les zéros initiaux pour obtenir l'écriture canonique.

2. Exactement n chiffres pour les entiers positifs

Le plus petit est 1 suivi de n − 1 zéros, soit bⁿ⁻¹. Le plus grand reste bⁿ − 1. L'intervalle est donc bⁿ⁻¹ ≤ N ≤ bⁿ − 1, contenant bⁿ − bⁿ⁻¹ = (b − 1)bⁿ⁻¹ valeurs.

On peut aussi compter les écritures : le premier chiffre possède b − 1 choix, car il n'est pas nul ; les n − 1 positions suivantes ont chacune b choix. Ce produit donne la même formule.

Le cas particulier du naturel zéro

Avec la convention annoncée, zéro possède exactement un chiffre. Pour n = 1, l'ensemble des naturels ayant exactement un chiffre est donc {0, 1, …, b − 1}, de cardinal b. Pour n ≥ 2, zéro ne s'ajoute pas : l'intervalle et la formule précédents s'appliquent sans modification. Une réponse qui donne seulement (b − 1)bⁿ⁻¹ doit préciser qu'elle compte les entiers positifs, ou traiter séparément zéro.

Exercice 1-7 : Le cube 1331 dans plusieurs bases

En base 10, 1331 est le cube de 11. Vérifier l'égalité pour des écritures en base 16, puis montrer que 1331b est un cube pour toute base entière b > 3.

Voir le corrigéMasquer le corrigé

1. Vérification en hexadécimal

Lire une même suite de chiffres dans une nouvelle base change sa valeur. Ainsi 1116 = 1 × 16 + 1 = 1710. Son cube vaut 4913. D'autre part, 133116 = 1 × 16³ + 3 × 16² + 3 × 16 + 1 = 4913. Les deux valeurs concordent :

133116 = (1116)³.

Le cube n'est donc pas celui de onze décimal, mais celui du nombre écrit « 11 » dans la base considérée. C'est cette distinction entre valeur et écriture qui explique le résultat.

2. Démonstration dans une base quelconque

Le développement positionnel donne 1331b = b³ + 3b² + 3b + 1. Or l'identité remarquable du cube d'une somme donne :

(b + 1)³ = b³ + 3b² + 3b + 1.

Comme b + 1 s'écrit 11b, on en déduit 1331b = (11b)³. L'égalité est établie symboliquement pour toutes les bases autorisées ; tester quelques exemples n'aurait pas suffi à la démontrer.

Pourquoi imposer b > 3 ? Le chiffre 3 doit être autorisé. En base 3, les chiffres possibles sont seulement 0, 1 et 2 : l'écriture « 1331 » serait invalide. La formule polynomiale existe encore comme calcul algébrique, mais elle ne correspond plus à cette écriture de numération.

Exercice 1-8 : Carré et cube de 1 suivi de zéros puis 1

L'entier x s'écrit en binaire avec un 1, puis n zéros, puis un 1, avec n ≥ 1. Déterminer les écritures binaires de x² et x³.

Voir le corrigéMasquer le corrigé
Notation des blocs. Dans cette solution, « 0 répété r fois » est un bloc de r zéros. Si r = 0, le bloc est vide : ce n'est pas un zéro supplémentaire. Pour éviter de perdre une position, posons k = n + 1. Alors x = 2ᵏ + 1 et k ≥ 2.

1. Écriture de x²

En développant, x² = (2ᵏ + 1)² = 2²ᵏ + 2ᵏ⁺¹ + 1. Les positions allumées sont donc 2k, k + 1 et 0. Elles sont distinctes puisque k ≥ 2. Entre les positions 2k et k + 1, il y a k − 2 = n − 1 zéros. Entre k + 1 et 0, il y a k = n + 1 zéros.

x² = [1] [0 répété n − 1 fois] [1] [0 répété n + 1 fois] [1]2.

On compte bien les positions entre les 1 : la différence des exposants doit être diminuée d'une unité pour obtenir le nombre de zéros.

2. Écriture de x³

Le développement donne x³ = 2³ᵏ + 3 × 2²ᵏ + 3 × 2ᵏ + 1. En binaire, 3 = 112. Chacun des coefficients 3 produit donc deux positions voisines :

x³ = 2³ᵏ + 2²ᵏ⁺¹ + 2²ᵏ + 2ᵏ⁺¹ + 2ᵏ + 1.

Les positions sont 3k, 2k + 1, 2k, k + 1, k et 0. Elles restent distinctes pour k ≥ 2 : aucun 1 ne se superpose, donc aucune retenue ne modifie ce développement. On lit successivement un 1, un bloc de n − 1 zéros, « 11 », encore n − 1 zéros, « 11 », puis n zéros et le dernier 1.

x³ = [1] [0 répété n − 1 fois] [11] [0 répété n − 1 fois] [11] [0 répété n fois] [1]2.

Vérification des trois premiers cas
nx en base 2x² en base 2x³ en base 2
1101110011111101
2100110100011011011001
3100011001000011001100110001

Pour n = 1, les blocs de n − 1 zéros disparaissent. On obtient x = 1012, x² = 110012 et x³ = 11111012. Les mêmes formules couvrent donc ce cas limite sans rajouter artificiellement des zéros. L'hypothèse n ≥ 1 est importante : avec n = 0, certaines positions du cube se superposeraient et produiraient des retenues.

Exercice 1-9 : Miroirs, des chiffres inversés

Dans une base entière b ≥ 3, deux entiers naturels non nuls c et d sont différents de 1 et de b, et satisfont c + d = b + 1.

  1. Encadrer c et d et préciser leur nature dans la base b.
  2. Montrer que N = c(b − 1) et M = d(b − 1) s'écrivent avec les mêmes chiffres en ordre inverse.
  3. Déterminer l'écriture en base b de N + M.

Les lettres N et M désignent ici les nombres appelés n et m dans le PDF.

Voir le corrigéMasquer le corrigé

1. Encadrement

Comme c et d sont des naturels non nuls différents de 1, on a c ≥ 2 et d ≥ 2. En utilisant d ≥ 2 dans c = b + 1 − d, on obtient c ≤ b − 1. De la même façon, d ≤ b − 1. Ainsi :

2 ≤ c ≤ b − 1 et 2 ≤ d ≤ b − 1.

Ce sont donc des valeurs de chiffres valides en base b. Les valeurs c − 1 et d − 1 sont elles aussi des chiffres, non nuls, compris entre 1 et b − 2. On ne suppose pas que c ou d est un chiffre décimal : une base plus grande peut nécessiter d'autres symboles.

2. Faire apparaître quotient et reste

Un nombre s'écrit avec deux chiffres a et r en base b lorsqu'il vaut ab + r, avec 1 ≤ a < b et 0 ≤ r < b. Transformons N :

N = cb − c = (c − 1)b + (b − c)
= (c − 1)b + (d − 1).

La dernière égalité vient de c + d = b + 1. Les deux coefficients sont bien des chiffres valides ; le premier n'est pas nul. L'écriture de N a donc pour chiffre de gauche c − 1 et pour chiffre de droite d − 1.

En échangeant c et d, on obtient M = (d − 1)b + (c − 1). Les deux chiffres sont inversés. Il ne s'agit pas de multiplier ou concaténer les écritures décimales des expressions c − 1 et d − 1 : chacune représente une seule valeur de chiffre dans la base b.

3. Addition

N + M = (c + d)(b − 1) = (b + 1)(b − 1) = b² − 1. Ce nombre s'écrit donc avec deux chiffres maximaux :

N + M = [b − 1][b − 1]b.

On retrouve ce résultat en additionnant colonne par colonne : (c − 1) + (d − 1) = b − 1. La colonne des unités ne produit aucune retenue, et la colonne suivante donne la même somme. Le cas c = d reste autorisé lorsque la relation le permet : les deux nombres sont alors identiques, et leur écriture est déjà un palindrome.

Partie 2Représentation des entiers

Exercice 1-10 : Taille d’un grand entier de Mersenne

On étudie l'entier N = 277232917 − 1, cité dans le support comme un nombre premier de Mersenne.

  1. Donner son écriture binaire.
  2. Déterminer le nombre de chiffres de son écriture décimale.
  3. Calculer l'espace nécessaire pour le stocker en binaire pur puis en BCD, exprimé en Mo.
Voir le corrigéMasquer le corrigé
Conventions de stockage. Un octet contient 8 bits. Nous utilisons Mo = 10⁶ octets et Mio = 2²⁰ octets. En BCD non signé, chaque chiffre décimal occupe quatre bits. On distingue le nombre de bits utiles du nombre d'octets entiers à réserver ; on ne compte ici ni en-tête d'objet, ni signe, ni métadonnées.

1. Écriture binaire

Pour tout entier p positif, 2ᵖ s'écrit avec un 1 suivi de p zéros. Soustraire 1 transforme ces p zéros en p chiffres 1, et le premier 1 disparaît. Ainsi N est une suite de 77232917 bits tous égaux à 1. Sa longueur utile est exactement 77232917 bits, pas une unité de plus.

2. Nombre de chiffres décimaux

Pour un entier positif N, avoir d chiffres décimaux signifie 10ᵈ⁻¹ ≤ N < 10ᵈ. On en déduit d = ⌊log₁₀(N)⌋ + 1. Pour notre nombre :

log₁₀(N) = 77232917 × log₁₀(2) + log₁₀(1 − 2−77232917).

Le premier terme vaut environ 23249424,6696266195. Le second est négatif, mais son amplitude est extraordinairement petite : il ne fait pas franchir une frontière entière. Le calcul de contrôle utilise une précision décimale élevée et vérifie l'encadrement de la partie entière. Le résultat est donc 23249425 chiffres décimaux. Il n'est pas nécessaire de construire une chaîne contenant tous ces chiffres.

3. Binaire pur et BCD

En binaire pur, les bits utiles sont ceux déjà comptés. Pour les loger dans des octets, on arrondit au supérieur : ⌈77232917/8⌉ = 9654115 octets. Les trois bits non utilisés du dernier octet constituent un remplissage, pas des chiffres supplémentaires du nombre.

En BCD, il faut quatre bits pour chacun des 23249425 chiffres décimaux : 92997700 bits. Cela représente 11624712,5 octets utiles au sens d'une division arithmétique, mais il faut réserver 11624713 octets entiers. Le dernier demi-octet peut rester inutilisé.

Stockage idéal non signé, avec arrondi à l’octet supérieur
CodageBits utilesOctets réservésMoMio (environ)
Binaire pur77 232 9179 654 1159,6541159,206882
BCD92 997 70011 624 71311,62471311,086190

Le BCD consomme davantage, car quatre bits offrent seize motifs alors qu'un chiffre décimal n'en utilise que dix. Une valeur numérique n'est pas stockée de la même façon selon qu'on code directement son développement binaire ou séparément chacun de ses chiffres décimaux.

Repère historique. La mention de record dans le document ne doit pas être reprise comme une actualité : ce nombre a fait l'objet d'une annonce GIMPS en janvier 2018, et un nombre plus grand a été annoncé en décembre 2018, avant la date de 2021 citée dans le support. Nous conservons exactement N pour résoudre les questions. Sa primalité n'intervient dans aucun calcul de taille.

Exercice 1-11 : Un entier sur 1 Go, bits et chiffres

On suppose qu'un entier naturel occupe 1 Go, avec un stockage idéal utilisant seulement ses bits utiles.

  1. Combien de bits cela représente-t-il ?
  2. Quel est le plus grand entier représentable ?
  3. Combien de chiffres décimaux possède cet entier ?
Voir le corrigéMasquer le corrigé

1. Lever l'ambiguïté de l'unité

Nous prenons d'abord 1 Go = 10⁹ octets, soit un milliard d'octets. Comme un octet vaut huit bits, on dispose de K = 8000000000 bits. Le nombre de bits est huit fois le nombre d'octets, et non le même nombre avec une autre étiquette.

Certains énoncés ou anciens usages appellent « Go » une quantité de 2³⁰ octets. Cette quantité se note précisément 1 Gio. Pour rendre la correction exploitable quelle que soit la convention du cours, les deux interprétations sont calculées ci-dessous.

2. Plus grand entier naturel

Le maximum d'un codage non signé sur K bits s'obtient en mettant tous les bits à 1. La somme 1 + 2 + … + 2ᴷ⁻¹ vaut 2ᴷ − 1. Avec la convention décimale du Go, le maximum est donc :

Nmax = 28000000000 − 1.

Écrire 2ᴷ au lieu de 2ᴷ − 1 donnerait la première valeur qui ne tient plus dans K bits : son écriture demanderait K + 1 positions. Nous parlons ici d'entiers naturels non signés. Réserver un bit de signe changerait l'intervalle.

3. Chiffres décimaux

On utilise d = ⌊log₁₀(2ᴷ − 1)⌋ + 1. Pour K = 8000000000, K × log₁₀(2) vaut environ 2408239965,31184956. Le minuscule terme correctif log₁₀(1 − 2⁻ᴷ) ne change pas la partie entière. Ainsi d = 2408239966 chiffres décimaux.

Ne pas confondre Go et Gio
ConventionOctetsBits KChiffres décimaux du maximum
Go1 000 000 0008 000 000 0002 408 239 966
Gio1 073 741 8248 589 934 5922 585 827 973

Pour 1 Gio, on obtient K = 8589934592 bits et le maximum 28589934592 − 1, comportant 2585827973 chiffres décimaux. Il ne faut pas mélanger le nombre de bits d'une convention avec le nombre de chiffres de l'autre.

Ce n'est pas une mesure réelle de l'objet Python. L'exercice impose un stockage idéal. Un entier Python réel utilise une structure interne avec des informations de gestion et des blocs de chiffres binaires. La mémoire disponible pour un processus comporte aussi d'autres objets. On ne peut donc pas déduire de ces calculs qu'un programme disposant de 1 Go pourra effectivement allouer ou afficher ce maximum. La précision des entiers Python n'élimine pas les limites physiques de mémoire.

Exercice 1-12 : Représentation des entiers signés

  1. Coder −103 sur 8 bits en signe-valeur absolue puis en complément à deux.
  2. Interpréter le mot 11011001 sur 8 bits selon ces deux codages.
  3. Interpréter le mot 011011001 sur 9 bits selon ces deux codages.
  4. Donner les intervalles d'entiers représentables sur n bits pour chacun des codages.
Voir le corrigéMasquer le corrigé
Deux conventions de signe. En signe-valeur absolue, le premier bit indique le signe, puis les autres bits codent la grandeur : 0 signifie positif et 1 négatif. En complément à deux sur n bits, le bit de gauche a le poids −2ⁿ⁻¹ et les autres gardent leurs poids positifs. Un motif binaire n'a donc pas de signe intrinsèque : il faut annoncer le codage et la largeur.

1. Coder −103 sur 8 bits

La décomposition 103 = 64 + 32 + 4 + 2 + 1 donne la grandeur 1100111 sur sept bits. En signe-valeur absolue, on lui ajoute le bit de signe 1 :

−103 → 11100111 en signe-valeur absolue.

Pour le complément à deux, on commence par +103 sur huit bits, soit 01100111. On inverse tous les bits, puis on ajoute une unité en gardant la largeur de huit bits :

+103 : 01100111
inversion : 10011000
ajouter 1 : 10011001

On obtient 10011001. Vérification par les poids : −128 + 16 + 8 + 1 = −103. Le résultat n'est pas obtenu en changeant seulement le premier bit de l'écriture positive.

2. Décoder 11011001 sur 8 bits

En signe-valeur absolue, le signe vaut 1 et les sept bits restants 1011001 représentent 64 + 16 + 8 + 1 = 89. La valeur est donc −89.

En complément à deux, le poids négatif du bit de gauche donne −128 + 64 + 16 + 8 + 1 = −39. On retrouve cette valeur en lisant d'abord le mot comme un entier non signé, 217, puis en retirant 2⁸ = 256 : 217 − 256 = −39.

3. Décoder 011011001 sur 9 bits

Le premier bit est maintenant 0. Le mot représente donc une valeur positive dans les deux codages. Les huit bits restants valent 128 + 64 + 16 + 8 + 1 = 217. Ainsi les deux interprétations valent +217.

Le zéro ajouté en tête ne préserve pas la valeur négative du mot précédent. Pour étendre un complément à deux négatif à une largeur supérieure en conservant sa valeur, on prolonge son bit de signe par des 1. L'exercice fournit au contraire un nouveau mot commençant par zéro.

4. Intervalles sur n bits

Le mot 11011001 vaut moins 89 ou moins 39 selon le codage ; sur neuf bits, 011011001 vaut 217.
La largeur et le codage sont indispensables à l’interprétation. Cliquer pour agrandir.
Intervalles sur n bits
CodageMinimumMaximumZéro
Signe-valeur absolue−(2ⁿ⁻¹ − 1)2ⁿ⁻¹ − 1Deux motifs
Complément à deux−2ⁿ⁻¹2ⁿ⁻¹ − 1Un seul motif

Le signe-valeur absolue possède deux motifs pour zéro : un signe positif et un signe négatif devant une grandeur nulle. Il représente donc 2ⁿ − 1 valeurs entières distinctes, bien qu'il possède 2ⁿ motifs. Le complément à deux a un seul zéro et représente 2ⁿ entiers ; il dispose d'une valeur négative supplémentaire, ce qui explique son intervalle asymétrique. Les formules valent pour n ≥ 1.

Exercice 1-13 : Additions et multiplications binaires

Construire les tables d'addition et de multiplication en base 2. Effectuer ensuite 1110102 + 10012 et 1100102 × 10012.

Voir le corrigéMasquer le corrigé
Retenue et décalage. En base 2, une colonne ne conserve que le reste modulo 2 ; le quotient est reporté à gauche. Décaler un entier binaire d'une position vers la gauche multiplie sa valeur par 2, tant qu'on ne tronque pas sa largeur.

1. Les tables

Tables élémentaires de l’addition et de la multiplication
aba + b (base 2)Chiffre / retenuea × b
0000 / 00
0111 / 00
1011 / 00
11100 / 11

L'addition 1 + 1 donne 102 : le chiffre écrit dans la colonne courante est zéro et la retenue vaut un. Si une retenue entre déjà dans la colonne, on peut avoir 1 + 1 + 1 = 112, donc un chiffre 1 et une retenue 1. La table élémentaire reste utile, mais il faut aussi lire la retenue provenant de la colonne précédente.

2. Addition

On aligne les chiffres des unités à droite, en complétant le second opérande par des zéros à gauche :

   111010
 + 001001
 --------
  1000011

La colonne des unités donne 0 + 1 = 1. La suivante donne 1 + 0 = 1. La position de poids 4 donne zéro. À la position de poids 8, 1 + 1 donne zéro avec une retenue. Celle-ci se propage ensuite à travers les deux 1 suivants. La dernière retenue crée le nouveau bit de gauche.

Le résultat est 10000112. Contrôle décimal : 1110102 = 58 et 10012 = 9 ; leur somme vaut 67, soit 64 + 2 + 1.

3. Multiplication

Le multiplicateur 10012 possède deux bits allumés : celui des unités et celui de poids 8. Il suffit donc d'additionner le multiplicande à une copie décalée de trois positions. Les deux positions intermédiaires du multiplicateur produisent des lignes nulles :

      110010
 ×      1001
 -----------
   000110010   ← 110010 × 1
   000000000   ← chiffre de poids 2 : zéro
   000000000   ← chiffre de poids 4 : zéro
 + 110010000   ← 110010 × 8
 -----------
   111000010

On obtient 1110000102. Vérification : 1100102 = 50, donc 50 × 9 = 450. Le développement du résultat vaut 256 + 128 + 64 + 2 = 450. Ce produit demande neuf bits ; le calcul ne doit pas être tronqué arbitrairement sur huit bits.

Exercice 1-14 : Codage BCD et addition corrigée

Coder les entiers 123 et 78 en BCD, puis effectuer 123 + 78 directement dans ce codage.

Voir le corrigéMasquer le corrigé
BCD 8421. Le décimal codé binaire représente chaque chiffre décimal séparément sur quatre bits, avec les poids 8, 4, 2 et 1. Seuls les motifs 0000 à 1001 codent un chiffre valide. Les motifs 1010 à 1111 ne représentent pas des chiffres décimaux.

1. Coder les opérandes

Pour 123, on code successivement les chiffres 1, 2 et 3. Pour 78, on code 7 et 8. Pour aligner les trois colonnes de chiffres décimaux lors de l'addition, on peut écrire 078 ; le zéro initial ne change pas la valeur.

123 : 0001 0010 0011
 78 :      0111 1000
078 : 0000 0111 1000

Il ne faut pas convertir 123 globalement en binaire puis couper ce résultat par groupes de quatre. Le BCD suit les chiffres de l'écriture décimale, pas les paquets de bits du développement binaire pur.

2. Règle de correction

On additionne les groupes de quatre bits de droite à gauche. Lorsque la somme brute dépasse 9, ou lorsqu'une retenue sort du groupe, on ajoute 01102, soit 6, au résultat binaire de ce groupe. On conserve les quatre bits bas comme chiffre et on reporte la retenue décimale.

Pourquoi 6 ? Une colonne binaire sur quatre bits change de rang après 16 valeurs, alors qu'une colonne décimale change après 10. Le complément 16 − 10 = 6 corrige ce décalage. Pour une somme brute entre 10 et 19, ajouter 6 fait apparaître la bonne retenue et laisse le chiffre décimal voulu dans les quatre bits bas.

3. Application colonne par colonne

Addition BCD avec propagation des retenues
ColonneSomme bruteCorrectionChiffre écritRetenue
Unités3 + 8 = 111011 + 0110 = 1 000100011
Dizaines2 + 7 + 1 = 101010 + 0110 = 1 000000001
Centaines1 + 0 + 1 = 2Aucune00100

Aux unités, 3 + 8 = 11 : le motif 1011 est invalide. Après ajout de 0110, on obtient 1 0001 : on écrit 0001 et on reporte 1. Aux dizaines, il faut inclure cette retenue : 2 + 7 + 1 = 10. La correction produit 1 0000 : chiffre 0000 et nouvelle retenue 1. Aux centaines, 1 + 0 + 1 = 2 ; aucun ajustement n'est nécessaire.

  0001 0010 0011   (123)
+ 0000 0111 1000   (078)
----------------
  0010 0000 0001   (201, après corrections BCD)

Le résultat est donc 201, codé 0010 0000 0001. Tous les groupes finaux sont valides. Une addition binaire globale sans les corrections de groupes ne fournirait pas directement ce mot BCD.

Questions / Réponses

Aucune question. Soyez le premier à poser une question.
★ ★ ★ ★ ★
Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam