Opérateur sizeof

Mourad -  
fiddy Messages postés 11069 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

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
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
frustr14
 
un int est codé sur 2 octet en langage C !!
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101 > 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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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