Opérateur sizeof

Mourad -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir ,
je me trouve en confusion lorsque j'ai fait l'execution de ce code en C
 
double n=5.2;
char c=127;
printf("%d\t%d\t%d\t%d\t%d ",sizeof(!n),sizeof(c),sizeof(3*c),sizeof((int)c));


Resultat :
Success time: 0 memory: 2160 signal:0
4 1 4 4
Quelq'un peut t-il m'eclaircir le résulat et merci

1 réponse

  1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,

    l'operation ! retourne toujours un int qui vaut 1 ou 0, donc taille 4
    sizeof(char) vaut 1 par définition
    int * char => int donc taille 4
    après conversion on a un int donc taille 4
    0
    1. frustr14
       
      un int est codé sur 2 octet en langage C !!
      0
      1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102 > frustr14
         
        En langage C, un
        int
        est classiquement codé sur la taille d'un registre processeur
        un système 8 ou 16 bits => 2 octets
        un système 32 bits => 4 octets
        un système 64 bits => 8 octets (sauf pour Windows64 où il ne fait que 4 octets)

        et un
        char
        est la plus petite unité accessible d'au moins 1 octet :
        => 1 octet sur beaucoup de machines, sauf certains embarqués (par exemple TMS320) où il fait 2 octets.

        et les autres types intégraux sont définis par l'inégalité :
        char <= short <= int <= long int <= long long int
        0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Tout à fait d'accord avec Dalfab.
      Un char vaut 1 byte d'au moins 8 bits. Donc classiquement, un char est représenté sur 1 octet.
      Le reste découle de l'inégalité.
      0