Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Tableau des types de données pour entiers (C99, proc. 32 bits)
-32768 à 32767
-2147483648 à 2147483647
-2 147 483 648 à 2 147 483 647
–9,223,372,036,854,775,808 à
9,223,372,036,854,775,807
Entier long long non signé
0 à 18,446,744,073,709,551,615
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Conséquences :
‣L’algorithme ne s’arrête jamais (exécution infinie)
‣Le programme s’arrêtera au bout d’un certain temps
-ceci quel que soit le type de la variable a
-type : retarde la fin d’exécution
26
entier a;
debut
a <- 1;
tant que (a > 0) faire
a<- a + 1;
fin tant que
fin
int main() {
int a;
a=1;
while (a > 0) {
a = a+1;
}
}
Algorithme de boucle infinie Implémentation en C
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Incrémentation d’une variable dont la valeur est maximum
‣Integer Overflow
‣Résultat obtenu dépendant du type (donc de la représentation)
-Type non signé (mot clé unsigned )
-Type signé
-Problèmes dans tous les cas
27
Exemple : pacman
‣Numéro de level codé sur 1 octet
‣256 possibilités
‣Levels 0 à 255 OK
‣Level 256 : problèmes d’affichage
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Représentation des valeurs entières sur type non signé :
‣Le poids de chaque bit correspond à une puissance de deux
‣Valeur max atteinte lorsque représentation binaire : 1111...1111
‣incrémentation : 10000 ... 0000
-bit tout à gauche inexistant
-réduction au nombre 0000...0000
Représentation des valeurs entières sur type signé
‣Bit de poids fort à 0 pour les entiers positifs
‣Valeur Max atteinte lorsque représentation binaire : 0111...1111
‣Valeur numérique de 1000...0000 jusqu’à 1111...1111 ?
‣Comment sont représentés les entiers négatifs ???
‣Pourquoi peut-on représenter un négatif de plus qu’un positif ??
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers négatifs
Approche naïve : méthode Sign-and-Magnitude
‣n-1 bits de poids faibles : code un nombre
‣1 bit de poids le plus fort : code le signe
-0 : nombre positif
-1 : nombre négatif
‣Inconvénients :
-double représentation du 0
-opérations arithmétiques compliquées
Représentation sur type de taille 1 octet
Représentation sur type de taille 1 octet
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers négatifs
Complément-à-un
‣Nombre positif codé sur n-1 bits
‣Pour obtenir le négatif : inversion des bits
‣Avantages :
-certaines opérations mathématiques sont facilités
-exemple : addition
‣Inconvénients :
-double représentation du 0
Représentation sur type de taille 1 octet
Représentation sur type de taille 1 octet