IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Taille chaine nécessaire pour stocker un entier


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Taille chaine nécessaire pour stocker un entier
    Bonjour,

    est-ce que quelqu'un sait comment on peut récupérer la taille MIN d'une chaine de caractères pour y stocker un entier.

    Exemple,
    Si sizeof(int) = 4, il faut 10 caractères pour stocker l'entier max, en l'occurence:2147483647.

    Mais si sizeof(int) = x, il faut combien de caractère?

    Est-ce qu'il existe une macro ou une feinte pour pouvoir déclarer cela de façon static?

    merci d'avance pour vos réponses
    Gui

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    soit le plus grand nombre nombre représentable sur n octets : donc sur (8*n) bits,
    le nombre de combinaisons possible est 2^(8*n)
    le nombre max est donc 2^(8*n)-1 (car le 0 est compris dans les 2^(8*n) combinaisons possibles)
    comme il s'agit d'entier signé il faut diviser par deux.
    ==> MAX=((2^(8*n)) / 2)-1
    ==> MIN=-(2^(8*n)) / 2)

    une fois que tu a la valeur max il ne te reste plus qu'a compter le nombre de caracteres (si tu travail avec les négatifs n'oublie pas un caractere pour le -).

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Oui, mais le but n'est pas de trouver le nombre max et le nombre min,

    mais le nombre de caractères nécessaires pour le stocker, dans mon exemple, 10

    merci

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,
    Citation Envoyé par gui31
    Oui, mais le but n'est pas de trouver le nombre max et le nombre min,

    mais le nombre de caractères nécessaires pour le stocker, dans mon exemple, 10

    merci
    Tu peut trouvé ça dans ton livre de C:
    http://www.infosys.utas.edu.au/info/....html#limits.h

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Y a que les macros qui rende l'entier min ou max, mais pas la taille de la chaîne équivalente?

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par gui31
    Y a que les macros qui rende l'entier min ou max, mais pas la taille de la chaîne équivalente?
    Bah après c'est du bidouillage, tu cherche le plus grand multiple de 10 diviseur du nombre (PGMD: Plus Grand Multiple de Dix)
    Exemple:
    • 1024 => PGMD=1.000 => taille = 4,
    • 542697 => PGMD=100.000 => taille = 6,
    • ...

    Maintenant, il s'agit de l'algo et non du C.

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Nous sommes bien d'accord,
    d'où le sens de ma question,

    il n'existe pas une macro ou une astuce très simple pour faire ça?? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define TAILLE_CHAINE express_simple
    char mon_nombre[TAILLE_CHAINE]
    Voilà, un truc simple quoi,
    du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define TAILLE_EN_CHAR(x) ((x/10) == 0)?1:1+TAILLE_EN_CHAR(x/10)
    char mon_nombre[TAILLE_EN_CHAR(MAXINT)]
    ou encore plus simple.

    Merci
    Gui

    [modéré par netah_25]
    [Balise [code] ajouté -
    Merci d'y penser a l'avenir]

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Taille chaine nécessaire pour stocker un entier
    Citation Envoyé par gui31
    est-ce que quelqu'un sait comment on peut récupérer la taille MIN d'une chaine de caractères pour y stocker un entier.
    Un truc comme ça::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* (c) Eric Sosman 2001 */
    #define BIG_ENOUGH (1 + (sizeof(long) * CHAR_BIT + 2) / 3 + 1)

  9. #9
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par gui31
    Oui, mais le but n'est pas de trouver le nombre max et le nombre min, mais le nombre de caractères nécessaires pour le stocker, dans mon exemple, 10
    comme je te l'ai dit
    Citation Envoyé par le y@m's
    une fois que tu a la valeur max il ne te reste plus qu'a compter le nombre de caracteres (si tu travail avec les négatifs n'oublie pas un caractere pour le -).

  10. #10
    Futur Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos réponses,

    As an aside, it's not very difficult to define BIG_ENOUGH
    in such a way that it will work on all implementations no matter
    how many bits a `long' value happens to use. Here's one way:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <limits.h>
     #define BIG_ENOUGH (1 + (sizeof(long) * CHAR_BIT + 2) / 3 + 1)
    The first `1' allots space for a possible leading minus sign.
    `(sizeof(long) * CHAR_BIT + 2) / 3' is the maximum possible number
    of digits in an *octal* representation of the value; the decimal
    representation cannot possibly be longer. The final `1' is for
    the string's terminating zero byte.

    This calculation usually comes out one or two bytes larger
    than absolutely necessary: with 32- and 64-bit `long' values,
    for instance, BIG_ENOUGH works out to 13 and 24, respectively,
    when 12 and 22 would actually suffice. Also, the calculation
    ignores possible padding bits or "holes" in the representation
    of `long' values, but they can only serve to reduce, not increase,
    the amount of space needed. In short, calculating BIG_ENOUGH
    this way is always[*] safe and wastes very little space. "It
    is a far, far better thing" than writing `#define BIG_ENOUGH

    [modéré par netah_25]
    [Balise [code] ajouté -
    Merci d'y penser a l'avenir]

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gui31
    Merci pour vos réponses,
    As an aside, it's not very difficult to define BIG_ENOUGH
    in such a way that it will work on all implementations no matter
    how many bits a `long' value happens to use. Here's one way:
    Hé hé, je vois que tu as retrouvé l'article d'Eric Sosman sur CLC...

    J'ai bien fait de citer mes sources.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. estimer la taille nécessaire pour une base de données
    Par crozet.magenta dans le forum Hébergement
    Réponses: 3
    Dernier message: 26/04/2013, 21h47
  2. Classe pour tableau d'entiers à taille variable
    Par Jéjé34 dans le forum Débuter
    Réponses: 15
    Dernier message: 28/03/2013, 20h27
  3. Réponses: 16
    Dernier message: 01/09/2011, 15h52
  4. Réponses: 2
    Dernier message: 05/02/2008, 11h47
  5. Composant pour stocker des images de différentes tailles
    Par CrocoB dans le forum Composants VCL
    Réponses: 17
    Dernier message: 18/09/2007, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo