print · rss · source

< Manipuler des valeurs | TutoCFrench | Les opérateurs binaires >


Les variables plus en détail

Notions :

  • type de donnée (entiers, flottant, signés, non-signés, constantes)
  • conversion
  • débordement

Dans la leçon précédente, nous avons brièvement vu quelques types de données. Ce chapitre passe en revue les autres types fondamentaux.

Les différents types de données

Les types de base

  • char, qui sert à stocker des caractères imprimables, stocke en réalité un petit entier codé sur un octet. La table de correspondance entre ces petits entiers et les caractères imprimables s'appelle la table des caractères ASCII. Par exemple, le caractère ASCII 'a' a pour valeur ASCII 97.

Il est donc tout à fait correct d'écrire une expression comme 'a' + 2 puisque 'a' est en réalité un entier.

  • short int pour stocker des petits entiers.
  • int pour stocker des entiers.
  • long int pour stocker des entiers plus grands.
  • float et double pour stocker des nombres réels.

Remarque : il n'existe pas de type "chaîne de caractères". Pour ce faire, on utilise les tableaux.

Des types signés ou non

Les types, comme int sont signés par défaut, ce qui signifie que ce type permet de stocker des valeurs positives et négatives.
Le mot-clef unsigned permet de définir un type comme étant non-signé, c'est à dire que la variable pourra stocker uniquement des valeurs positives.
Sur certaines architectures, les char sont non-signés par défaut ! Il est possible de les signer avec la directive signed.

Les constantes

La directive const permet d'empêcher la modification d'une variable donnée. Le contrôle se fait au moment de la compilation :

const int i = 70; /* i ne pourra etre modifie */
i++; /* interdit ! */

Notions avancées concernant les pointeurs:

const char *p; /* pointeur sur constante */
char * const p; /* pointeur constant */

Les différents types sous architecture i686

TypeOctetsPortée
char1-128 à +127
short int2-32768 à +32767
int4-2 147 483 648 à +2 147 483 647
long int8-4294967296 à +4294967295
unsigned char10 +255
unsigned short int20 à +65535
unsigned int40 à +4 294 967 295
unsigned long int8 
float4 
double8 

Convertir une valeur

Une conversion explicite d'une valeur stockée dans une variable est faite de la façon suivante :

(nouveau_type) variable;

Par exemple :

int a = 3, b = 6;
float c;
c = (float) a + (float) b;

Mais il existe aussi un certain nombre de conversions implicites :

  • Si par exemple on additionne un int et un float, l'int est converti en un float
  • Si un résultat est stocké dans un int, il y a aussi une conversion de la valeur dans ce type (ce qui peut altèrer le résultat)

Exemple :

int c;
float pi = 3.14159, r = 4.21;
c = pi * r;

Les constantes littérales

Un nombre utilisé dans une expression s'appelle une constante littérale. Par défaut, elle est de type int mais il est possible d'utiliser des constantes littérales de n'importe quel autre type :

ExempleType
5int
5u ou 5Uunsigned
5l ou 5Llong
5ulunsigned long
05octal
0x5hexadecimal
5.ffloat
5.double

Les débordement

Exemple :

#include<stdio.h>
int main()
{
    unsigned short a=65535;
    a++;
    printf("%d\n", a);
    return 0;
}

Exercices

  1. "dec2hex.c" : programme qui affiche en hexadécimal un nombre saisi en décimal.
  2. "hex2dec.c" : programme qui affiche en décimal un nombre saisi en hexadécimal.

Solutions

dec2hex.c

#include <stdio.h>

int main()
{
        int a;

        printf("> ");
        scanf("%d", &a);

        printf("%X\n", a);

        return 0;
}

hex2dec.c

#include <stdio.h>

int main()
{
        int a;

        printf("> ");
        scanf("%x", &a);

        printf("%d\n", a);

        return 0;
}

< Manipuler des valeurs | TutoCFrench | Les opérateurs binaires >

print · rss · source
Page last modified on March 23, 2008, at 12:03 AM