• [^] # Re: c ansi

    Posté par . En réponse au journal c ansi. Évalué à 6.

    Aïe aïe aïe !

    short <= int <= double

    Un double est un nombre en virgule flottante ! c'est donc un float avec une mantisse étendue. A ne surtout pas comparer avec les entiers ...

    Bon sinon, la taille d'un int seule est fonction de l'architecture de ta machine, donc 2 octets (comme un short) sur une machine 16 bits, 4 octets (comme un long) sur une machine 32 bits. C'est fait exprès. Cela correspond en général à la taille d'un registre du processeur (le plus souvent l'accumulateur).

    char correspond à la taille d'un caractère. Depuis l'ASCII, on code les caractères sur 8 bits, mais si tu tombes sur une machine qui utilise l'Unicode en natif (une telle machine n'existe pas à ma connaissance), tu peux te retrouver avec un char=2 octets.

    La taille des types de données natifs sera probablement réajustée avec le passage à 64 bits mais bon pour faire simple, disons que dans 99,99% des cas:

    char = 1 octet
    short int = 2 octets
    int = 4 octets (car archi 32 bits le plus souvent)
    long int = 4 octets

    float = 4 octets
    double = 8 octets

    pour avoir des entiers très longs, il me semble que c'est "long long" (8 octets) ou "quad" (pareil), mais c'est à vérifier.

    Enfin, s'il est vraiment vital pour toi de préciser impérieusement la longueur de ces données pour toutes les machines existant sur Terre et à venir (mais tournant sous Unix), jète un oeil aux fichiers types.h et sys/types.h, ils contiennent les définitions des types u_int8, u_int16 etc. qui en principe devraient toujours correspondre aux longueurs demandées.

    Amuse-toi bien.