[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
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
A voir également:
- [c]valeurs max des types de variables
- I14 pro max - Guide
- Max tv gratuit - Télécharger - Télévision
- 6play max - Guide
- Football max avis - Forum Consommation & Internet
- Casino max community - Forum Facebook
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
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.
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.
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).
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
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.
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.
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
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é.
D'avance Merci !!!
Il prend la valeur -1 puis -2 etc... si l'entier est signé.
5 sept. 2005 à 13:52
24 janv. 2013 à 13:56
25 janv. 2013 à 08:26