[c]valeurs max des types de variables

Fermé
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 - 2 sept. 2005 à 17:50
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 25 janv. 2013 à 08:26
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 sept. 2005 à 13:46
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
5 sept. 2005 à 13:52
Exact... J'ai rien dit :-s
0
Essaye surtout en C++ avec g++ ou en C avec gcc, ça marchera peut-être mieux ;)
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
25 janv. 2013 à 08:26
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
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 sept. 2005 à 18:19
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 sept. 2005 à 18:21
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