Contrairement à d'autres langages comme ML ou Maple, C n'opère pas sur des entiers de taille quelconque, mais sur l'un de ses types entiers, qui sont de taille fixe : short int, int, long int, le plus courant étant int , qui est codé sur 4 octets, c'est-à-dire 32 bits, sur les machines usuelles (Sparc, Alpha, Pentium). Ce sont des types d'entiers signés (c'est-à-dire positifs ou négatifs) ; il leur correspond des types d'entiers non-signés (c'est-à-dire positifs), dits unsigned .
Quand un type entier est codé sur N bits, entiers peuvent être
représentés. Pour des types non-signés, on peut ainsi représenter
l'intervalle
; pour N=32 la suite de bits
représente l'entier
.
Pour des types signés, les entiers dans l'intervalle sont représentables ; les entiers
sont représentés
de la même façon que dans le cas non-signé et l'on a
; les
entiers <0 sont représentés en complément à deux et l'on a
; pour N = 32, cela signifie que
représente l'entier
. Quand N=32, le plus grand entier signé représenté est de
l'ordre de
.
Il est inutile de connaître cette valeur ; mais il faut savoir que les
entiers représentés par le type int forment l'intervalle
[INT_MIN
, INT_MAX
], ces deux constantes étant définies
dans limits.h. Il y a des constantes analogues pour les autres
types entiers.
Les opérations sont réalisées modulo , et aucun test de débordement
n'est fait à l'exécution. Il ne faut donc pas s'étonner de voir des
résultats négatifs en cas de débordement ; par exemple l'évaluation de
INT_MAX
+ 1 donnera la valeur de INT_MIN
.
La notation décimale peut être utilisée pour noter les valeurs entières :
int a = 144;
Un entier peut être lu sur l'entrée standard (le clavier) au moyen de la
fonction scanf, et écrit sur la sortie standard (l'écran) avec
printf en utilisant la conversion %d
:
int n; scanf("%d", &n); printf("%d", n);
On remarquera bien la différence entre le &n
de
scanf et le n
de printf.