Concepts fondamentaux

Programmes sur les types simples

La déclaration d'une variable se fait en donnant son type puis son nom . Si le nom peut être à peu près librement choisi par le programmeur, le langage C connaît un certain nombre de types de base. Dans la suite de ce cours, la définition de nouveaux types sera abordée. De toute façon, ceux-ci reposent aussi sur des types de base.

La représentation en mémoire des types sera vue en détail. En effet, lors de l'écriture de protocole de transmission, la taille des données, la manière dont celle-ci est représentée sont très importantes.

Le type CHAR

Les variables de type char sont codées sur 8 bits. Le nombre maximum de caractères stockables avec cette représentation est facilement calculable: Un bit permet de coder deux valeurs (0, 1), deux bits permettent de coder quatre valeurs (00, 01, 10, 11).... A chaque ajout d'un bit au mot, le nombre de valeurs représentables est doublé. Le nombre de valeurs représentées par n bits est égal donc à 2n. Pour un mot de 8 bits cela fait 256 valeurs.

Un problème dans la représentation de l'octet est déjà visible sur la figure précédente. L'ordre de numérotation logique est normalement le bit 1 à gauche et le bit 8 à droite, mais pour être conforme à la représentation des nombres le bit le moins significatif est placé à droite.

La table la plus couramment employée pour définir l'affectation d'un caractère à un nombre est appelée table ASCII pour American Standard Code of Information Inter-exchange. La première partie de cette table (du code 0 au code 127) est bien normalisée. On retrouve ce codage sur presque la totalité des ordinateurs actuels, de l'ordinateur personnel IBM-PC aux super calculateurs CRAY.
Pour connaître la table ASCII en décimal, octal et hexadécimal tapez : man ascii.

Les 32 premiers caractères de la table ASCII ne sont généralement pas affichables. Ils sont appelés caractères de contrôle. Ils servent à gérer le déplacement du curseur sous un éditeur de texte, à contrôler une transmission de données entre deux ordinateurs ou à effectuer des traitements spéciaux ; par exemple le caractère 7 provoque l'émission d'un bip.

Par contre les caractères contenus dans la seconde partie de la table (du code 128 au code 255) dépendent du choix fait par le constructeur. Si un constructeur choisit d'assigner des caractères à cette seconde partie du tableau on parle alors d'ASCII étendu.
Sous Unix tout dépend de la police de caractère choisie. La police appelé ISO-LATIN1 est la plus couramment utilisée. Elle contient les caractères français accentués. En fait tout dépend de la police que vous avez choisi pour une fenêtre X-window. Tapez xterm -fn "*symbol*", votre fenêtre utilisera un alphabet grec.



Le type ENTIER court.

Le type entier court (short) est codé sur 16 bits.

L'ordre de remplissage des deux octets n'est pas standard. Les machines de type Sun, Hp remplissent l'entier dans l'ordre naturel, c'est-à-dire octet de poids fort puis octet de poids faible. Par contre les architectures basées autour des processeurs Intel (les PC) inversent, pour des raisons historiques liées à la performance, la représentation. L'octet de poids faible est stocké avant l'octet de poids fort.

Ceci peut poser des problèmes pour l'interconnexion de machines hétérogènes, car si le réseau transporte correctement, bit à bit, l'information, la reconstitution du message sera erronée.

Si la variable est utilisée en mode signé, le dernier bit (c'est-à-dire le bit de poids le plus fort) sert à coder le signe du nombre (0 pour un nombre positif, 1 pour un nombre négatif). Les 15 autres bits servent à coder la valeur. Les nombres positifs sont codés par leur représentation binaire classique. Sur 15 bits on peut donc représenter des nombres compris entre 0 et 32 767. Les nombres négatifs sont codés suivant la méthode dite du complément à deux: on prend la représentation en binaire de la valeur absolue du nombre, on inverse la valeur de chacun des bits qui composent ce nombre et on ajoute 1 au résultat. Cette technique permet de représenter des nombres compris entre -1 et -32 768. La représentation suivant le complément à deux permet d'utiliser l'opérateur addition quel que soit le signe des nombres à additionner.

Si le nombre est utilisé en mode non-signé le 16ième bit permet d'étendre la représentation du nombre et donc de doubler le nombre de valeurs possibles. Cela ne change pas la manière de calculer, mais par contre les tests et l'affichage des résultats devront être modifiés.

Par défaut le compilateur C travaille avec des nombres signés. Pour préciser que l'on utilise un nombre non signé, on fait précéder la déclaration du mot clé unsigned. Les variables de type char peuvent aussi servir à des calculs. il est donc possible de déclarer des variables de type unsigned char



Le type entier long.

Le type long ou entier long possède les même propriétés que le type entier mais le codage est effectué sur 32 bits au lieu de 16.



les nombres flottants et les opérations simples

Les nombres à virgule

Il ne reste plus qu'à voir très rapidement, dans les types prédéfinis, ceux permettant de représenter les nombres à virgule. Comme pour les entiers il en existe deux :suivant la taille qu'ils prennent en mémoire. La représentation interne de ces nombres a peu d'intérêt pour l'utilisation en réseau.
Suite : Opérateurs et Expressions


Menu Principal