Informatique · Première · 5 min de lecture
Combien de bits pour écrire un entier ?
Nombre de bits nécessaires pour écrire un entier naturel n en base 2 (le plus petit k tel que n < 2^k) ; plus grand entier représentable sur k bits (2^k − 1) ; une somme de deux entiers de k bits tient sur k + 1 bits, un produit sur 2k bits ; tailles courantes des entiers (8, 16, 32 ou 64 bits) ; entiers de taille arbitraire de Python.
Chapitre du programme : Numérique et sciences informatiques (spécialité)
Bloc 1 sur 7 · Comprendre
Comprendre : k bits, 2ᵏ valeurs
Avec k bits, on peut écrire 2ᵏ suites différentes de 0 et de 1, donc les 2ᵏ entiers de 0 à 2ᵏ − 1. Par exemple, sur 8 bits (un octet), on écrit les entiers de 0 à 255 : il y en a 256.
Le nombre de bits nécessaires pour écrire un entier naturel n (n ⩾ 1) est donc le plus petit k tel que n < 2ᵏ. Si 2ᵏ⁻¹ ⩽ n < 2ᵏ, l'écriture binaire de n a exactement k bits, et son bit de gauche, de poids 2ᵏ⁻¹, vaut 1.
def nb_bits(n):
k = 1
while 2 ** k <= n:
k = k + 1
return k
print(nb_bits(13), nb_bits(255), nb_bits(256))
print(bin(13), bin(255), bin(256))4 8 9
0b1101 0b11111111 0b10000000013 tient sur 4 bits (8 ⩽ 13 < 16), 255 sur 8 bits, mais 256 = 2⁸ en demande 9 : un 1 suivi de huit 0.
Bloc 2 sur 7 · Approfondir
Approfondir : somme, produit, tailles usuelles
Python le calcule directement avec la méthode bit_length() des entiers :
print((13).bit_length(), (255).bit_length(), (256).bit_length())4 8 9Somme. Deux entiers de k bits sont chacun au plus 2ᵏ − 1 ; leur somme est au plus 2ᵏ⁺¹ − 2, strictement inférieure à 2ᵏ⁺¹ : elle tient sur k + 1 bits.
Produit. Leur produit est strictement inférieur à 2ᵏ × 2ᵏ = 2²ᵏ : il tient sur 2k bits. Pour k ≥ 2, le maximum de 2k bits est atteint avec deux nombres dont tous les bits valent 1. Pour k = 1, le produit maximal 1 × 1 tient sur un seul bit :
a = 255
b = 255
print(a + b, (a + b).bit_length())
print(a * b, (a * b).bit_length())510 9
65025 16Tailles courantes. Les processeurs et beaucoup de langages manipulent des entiers de 8, 16, 32 ou 64 bits. Le plus grand entier naturel de chaque taille vaut 2ᵏ − 1 :
for k in [8, 16, 32, 64]:
print(k, 2 ** k - 1)8 255
16 65535
32 4294967295
64 18446744073709551615En Python, les entiers n'ont pas de taille fixe : ils grandissent autant que nécessaire.
n = 2 ** 100
print(n)
print(n.bit_length())1267650600228229401496703205376
101Bloc 3 sur 7 · Exemple
Exemple guidé : trois questions sur les bits
1. Combien de bits faut-il, au minimum, pour écrire 1 000 en base 2 ? On encadre 1 000 entre deux puissances de 2 consécutives : 2⁹ = 512 ⩽ 1 000 < 2¹⁰ = 1 024. Il faut 10 bits.
print((1000).bit_length())
print(2 ** 9, 2 ** 10)10
512 10242. Quel est le plus grand entier naturel qui s'écrit avec 12 bits ? Tous les bits valent 1 : 1 + 2 + 4 + … + 2¹¹ = 2¹² − 1 = 4 096 − 1 = 4 095.
3. Deux entiers s'écrivent chacun avec au plus 7 bits. Combien de bits faut-il, au maximum, pour leur produit ? Chacun est inférieur à 2⁷, donc le produit est inférieur à 2¹⁴ : 14 bits au plus. Le cas 127 × 127 montre que ce maximum est atteint :
print(127 * 127, (127 * 127).bit_length())16129 14Bloc 4 sur 7 · Visualiser
Voir : entiers et nombre de bits
| Entiers n | Encadrement | Nombre de bits |
|---|---|---|
| 1 | 2⁰ ⩽ n < 2¹ | 1 |
| 2 et 3 | 2¹ ⩽ n < 2² | 2 |
| 4 à 7 | 2² ⩽ n < 2³ | 3 |
| 8 à 15 | 2³ ⩽ n < 2⁴ | 4 |
| 128 à 255 | 2⁷ ⩽ n < 2⁸ | 8 |
| 256 à 511 | 2⁸ ⩽ n < 2⁹ | 9 |
Chaque fois que n atteint une puissance de 2, il faut un bit de plus.
Continuez sur votre lancée
Vous avez découvert l’essentiel et un exemple. Retrouvez la suite du cours et les points à retenir, puis passez à l’entraînement guidé dans votre compte.
- Les formules et les repères à retenir
- Les erreurs fréquentes expliquées
- Un exercice avec des aides et sa correction
L’accès gratuit comprend les cours et exercices de votre niveau choisi.
Sources
- BO spécial n°1 du 22 janvier 2019 — programme de spécialité numérique et sciences informatiques de première générale, annexe (https://cache.media.education.gouv.fr/file/SP1-MEN-22-1-2019/26/8/spe633_annexe_1063268.pdf) — « Représentation des données : types et valeurs de base », représentation binaire d'un entier relatif (« Évaluer le nombre de bits nécessaires à l'écriture en base 2 d'un entier, de la somme ou du produit de deux nombres entiers »)
- Documentation officielle de Python 3, The Python Language Reference et The Python Standard Library (https://docs.python.org/3/) — The Python Standard Library, « Built-in Types », int.bit_length()
Vous pensez avoir trouvé une erreur dans cette leçon ? Signalez-la par e-mail.