[c]valeurs max des types de variables

Maxg59 Messages postés 275 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
salut a tous !!!
allors voici mon probléme :
je dois faire un prog en C qui inscrit la valeur maximum des variables de chaque types ( ex :int max : +32767 ), signed et unsigned; ça parait facile en utilisant <limits.h> et <float.h> mais non ! Je ne doit pas les utiliser !!! je doit les calculer !!!
Mais je ne vois pas du tout commet faire !!
SVP aidez moi !!!
Juste pour savoir : quand un itn reçoit plus de 32767 il fait quoi ???? il s'arrete ???ou il fait un erreur ?
D'avance Merci !!!
A voir également:

4 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
desoler kilian, mais après essai en C++ avec gcc, 32767+1=-32768
et il n'est pas logique d'avoir -1+1=-2 !! c'est pas mathématique du tout.
donc nombre max :
nbmax=pow(2,sizeof(type)*8)-1; pour les entiers.
pour les float, il me semble que c'est plus compliquer que ça.
Cela doit dépendre du nombre de bit attribué à la position de la virgule flottante.
3
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Exact... J'ai rien dit :-s
0
alex
 
Essaye surtout en C++ avec g++ ou en C avec gcc, ça marchera peut-être mieux ;)
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
C'est sympa de remonter un message vieux de 7 ans pour faire le malin en disant des conneries. gcc est un "frontend" et le nom générique d'une collection de compilateurs de différents langages. Gcc contient bien sur gcc pour le C, g++ pour le C++, gcj pour le java, gfortran pour le fortran, etc. et le frintend utilise de lui même le compilateur qui va bien en fonction de la source fourni.
0
jbar
 
pour les unsigned : la valeur minimal est 0 et la valeur maximal est quand tous les bits sont à 1.
pour les signed : la valeur minimale est quand seul le premier bit est à 1, la valeur maximal est quand seul le premier bit est à 0.
On peut donc faire très simple :

unsigned int imax=-1;
unsigned short smax=-1;
unsigned char cmax=-1;

int simax=(int)imax>>1;
int simin=~simax; // (ou bien simax+1)
...

et pour les float : tu cast des signed max et min de la même taille (sizeof) dedans et le tour et joué (mais j'ai un petit doute).
1
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut,

Avec sizeof tu as la taille en octet d'un type.
Exemple : sizeof(int) == 4 (avec gcc)

Par exemple char fait 1 octet.
Sachant que la valeur maximale d'un octet non signé est de 255 ((2 puissance 8 )-1) alors pour avoir la valeur maximale d'un char tu fais:

bits_char= sizeof(char)*8;
max_char=(2 puissance bits_char)-1;

Il ya d'autres manières de procéder avec les opérateurs binaires....
Et si tu dois avoir la valeur max d'un type signé, il faudra ruser un peu.
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Juste pour savoir : quand un itn reçoit plus de 32767 il fait quoi ???? il s'arrete ???ou il fait un erreur ?
D'avance Merci !!!


Il prend la valeur -1 puis -2 etc... si l'entier est signé.
0