Rechercher : dans
Par :

[c]valeurs max des types de variables

Dernière réponse le 16 oct 2009 à 15:46:59 Maxg59, le 2 sep 2005 à 17:50:10 
 Signaler ce message aux modérateurs

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 !!! Merci !!!
max

Meilleures réponses pour « [c]valeurs max des types de variables » dans :
Les variables en C++ VoirLes variables en C++ 1. Les différents types de variables 1.1 bool 1.2 char 1.3 unsigned short int 1.4 short int 1.5 unsigned long int 1.6 long int 1.7 int (16 bits) 1.8 int (32 bits) 1.9 unsigned int (16 bits) 1.10 unsigned int (32...
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Langage C++ - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C++ sont typées, c'est-à-dire que les données contenues dans...

1

kilian, le 2 sep 2005 à 18:19:34

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.

Répondre à kilian

2

kilian, le 2 sep 2005 à 18:21:17

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é.

Répondre à kilian

3

Char Snipeur, le 5 sep 2005 à 13:46:20

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

4

kilian, le 5 sep 2005 à 13:52:13

Exact... J'ai rien dit :-s

Répondre à kilian

5

 jbar, le 16 oct 2009 à 15:46:59

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).

Répondre à jbar
Collection CommentÇaMarche.net