[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 -
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 !!!
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:
- [c]valeurs max des types de variables
- Driver max - Télécharger - Pilotes & Matériel
- I14 pro max - Accueil - Guide téléphones
- Types de souris informatique - Guide
- Les types de ram - Guide
- Max ou netflix - Accueil - Streaming
4 réponses
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.
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.
kilian
Messages postés
8732
Date d'inscription
Statut
Modérateur
Dernière intervention
1 526
Exact... J'ai rien dit :-s
alex
Essaye surtout en C++ avec g++ ou en C avec gcc, ça marchera peut-être mieux ;)
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.
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).
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).
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.
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.