La mémoire des ordinateurs se présente comme une suite 'd'octets' (anglais 'bytes').
Un 'bit' (contraction de 'binary digit') est un chiffre binaire c'est à dire 0 ou 1.
Un 'octet' est une suite de 8 'bits'.
Un octet se présente donc, par exemple, sous la forme:
0 1 1 0 1 0 0 1
C'est donc un nombre binaire à 8 chiffres maximum.
La plus petite valeur possible est 0 et la plus grande 11111111=255, soit au total 28 =256 possibilités.
C'est évidemment trop peu pour représenter les entiers naturels.
La plupart des langages de programmation (typés) proposent des types prédéfinis pour représenter les entiers naturels (ou du moins une partie d'entre eux).
Le langage C, par exemple, propose les unsigned short int (généralement sur 2 octets) et les unsigned long int (sur 4 octets).
Disons qu'un entier court peut être vu comme une suite de 16 digits ou comme un nombre à deux chiffres en base 256 au choix, et qu'un entier long peut être vu comme un nombre binaire à 32 chiffres .
Le nombre total des possibilités pour les entiers courts est 2 16 =65536, et le plus grand entier naturel représentable est 65535.
Le nombre total des possibilités pour les entiers longs est: 2 32 =4294967296, et le plus grand nombre représentable est 4294967295.
Il peut donc y avoir des débordements, certains langages, pour ne citer que C, ne traitent pas ces situations, c'est à dire qu'ils proposent des résultats incohérents sans message d'erreur, il appartient donc au programmeur de prévoir et de gérer lui-même les cas particuliers qui peuvent se produire.
Signalons encore deux particularités.
La première c'est que les entiers sont écrits en mémoire à l'envers les octets sont écrits par ordre de poids croissants (un peu comme un nombre qui serait écrit de droite à gauche.
La seconde c'est que parallèlement au système binaire on utilise beaucoup le système hexadécimal (base 16) qui est une puissance de deux, ainsi chaque 'chiffre' hexa est composé de 4 chiffres binaires, et un octet se note avec seulement deux chiffres hexas.
En hexa on utilise les chiffres décimaux usuels 0,1,2,.....,9 puis on complète avec des lettres:
A=10,B=11, ..... F=15
Ainsi le plus grand octet est FF=255

Ce programme C met en évidence la représentation en mémoire du type 'short int'.

Bignums

Pour ce qui concerne les très grands entiers, les langages procéduraux (type C, Pascal, etc..) obligent à utiliser des tableaux:
Considérons en effet un très grand entier comme:
n=71501047895621475060581235
qui dépasse la capacité des unsigned long du langage C.
On peut par exemple considérer que ce nombre est écrit en base 104 =10000 (par exemple)
et que ses 'chiffres' sont de droite à gauche:
1235
581
5060
1475
9562
478
1501
7
On peut donc le représenter dans un tableau de 8 unsigned int. A partir de nombres ainsi représenté avec le même 'format' (tableaux de même dimension), on peut faire des opérations.
Addition (avec retenues)
Multiplication (avec retenues)
etc...
On appelle couramment ces tableaux des 'bignums' .

Café Python

Le langage Python présente une particularité (parmi d'autres). Il possède un type entier (int) prédéfini comme la plupart des autres langages, mais il gère les débordements de façon très originale. Dès que la capacité maximale est atteinte, il change de mode de représentation et passe en 'mode liste' dans lequel on n'est limité que par la taille mémoire de la machine.