Représentation des entiers naturels en python

Python étant un langage informatique, les nombres sont bien sûr représentés de manière interne en binaire par l’ordinateur. Cependant, il faut bien distinguer la représentation interne (qui n’est en général pas visible) de la manière d’afficher un nombre dans un terminal.

Par défaut, python lit et affiche les nombres en base 10.

>>> 123
123

On peut saisir des nombres en base 2 en les préfixant par 0b:

>>> 0b10110111
183

Notons que python ne garde pas en mémoire le fait qu’un nombre ait été lu sous forme binaire: un nombre est un nombre, peu importe la base dans laquelle on l’a lu, ni d’ailleurs la base dans laquelle on souhaite l’afficher.

Il est possible de déterminer la représentation binaire d’un entier par la fonction bin(entier) dont le résultat est une chaîne de caractère:

>>> bin(123)
'0b1111011'

Attention: Il ne faut surtout pas confondre la chaîne de caractères '0b1111011' avec le nombre 0b1111011 que python stockera en binaire (puis affichera ensuite) comme l’entier 123 en base 10.

Remarque: Quelle que soit l’architecture de l’ordinateur utilisé (probablement 64 bits de nos jours, mais parfois encore 32 bits), les entiers sont représentés de manière spéciale par python (nous ne préciserons pas comment), et permettent de représenter des nombres de taille arbitraire (la seule limite est la taille de la mémoire). Notons que, quels que soient les détails de cette représentation interne, en dernier ressort l’ordinateur utilisera toujours des bits. Voici par exemple la représentation décimale et binaire de 31000:

>>> n = 3**1000
>>> n
132207081948080663689045525975214436596542203275214816766
492036822682859734670489954077831385060806196390977769687
258235595095458210061891186534272525795367402762022519832
080387801477422896484127439040011758861804112894781562309
443806156617305408667449050617812548034440554705439703889
581746536825491613622083026856377858229022841639830788789
691855640408489893760937324217184635993869551676501894058
810906042608967143886410281435038564874716583201061436613
2173102768902855220001
>>> bin(n)
'0b111110010110111010000000100010011010100110110100110001
011100000100100000011000001110100111010100010010110011011
001011100101111011110100011000100111100110001011011110000
110001011011100110111101001011111001010100010000001001100
001101000110010111000011111101001100111110110101000101110
010010000001100010010110000101111110110101111001000110000
011100000111000010001101010010001011111101110110000001010
001001101110100111000111011101010110001100100101101110001
010000111001010011100100101000001111110110010001000001101
001010001000010011011011010000100100000101001111101001101
001000001101011000111111001100001101010011001110001011011
100100011101000000100101110011011101010001100111111100010
000011101101111110101100100011100110011000100110101101000
101100011010110001011001011101110100011110010010111100110
100001011010110010110000110111001110110100010101001100001
000101101111010001111001110101011000111010111010010111101
101100001010101100110100000001100001011011000011010110000
010010011010001101101100000101000100011110000010000000010
000111101010001111101100011100010101000000011000111010110
111011101111000000010010001001010101100111101111100000001
011100011110111010101001001011000011010010011001000011110
101101111001011001110110100100010001100100000111011001100
001010000101011010011000000110111010011100000101111010100
011100111101010110110110011100000011001011011110100101010
000001001000111100110010100100111001110111000100001011101
100000010000011010010000011000110001100010010010100000011
000101011011110111100001100111110110111110010101100001011
0100100110111101111010011101110000101101100100001'

Notons qu’en python, l’opérateur d'élévation à la puissance (appelé exponentiation en mathématiques) se note à l’aide d’une double multiplication **.

Cette souplesse offerte par le langage python est relativement inédite et n’existe quasiment dans aucun autre langage de programmation (en dehors de ceux généralement dédiés aux mathématiques formelles). En général, les variables contiennent des entiers dont le nombre de bits est fixé à l’avance (8, 16, 32, 64 ou 128 pour la plupart des langages courants).