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 :

Int -> Char Question Theorique sur la taille Max du Tableau


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Int -> Char Question Theorique sur la taille Max du Tableau
    Voila j'ai cherché un peu sur le web sans trouver de reponse a ma question.
    Le tres connu itoa a le profil suivant :

    char * itoa ( int value, char * str, int base );

    J'ai cherché donc quelle etait la taille maximale que pouvait avoir le tableau qui allait contenir la conversion de l'entier.

    Il est écrit : "str should be an array long enough to contain any possible value: (sizeof(int)*8+1) for radix=2, i.e. 17 bytes in 16-bits platforms and 33 in 32-bits platforms."

    Source : http://www.cplusplus.com/reference/c...dlib/itoa.html

    Sachant qu'un char est codé sur 8 bytes comment cela se fait qu'on ne fait pas un tableau de sizeof(int) + 1.

    Merci d'avance,
    Scowl

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Il n'y a pas de taille maximale pour le tableau, et un char est codé au minimum sur 8 bits.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Alors pourquoi il est marqué dans Cplusplus.com que dans l'eventualité ou tu prends le max pour un int ca fera sizeof(int)*8 + 1 le tableau qui recreva l'int en version tableau de caracteres.

    Ce sont pas des manches la bas car meme xD, il doit y avoir une raison mais laquelle...

  4. #4
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Citation Envoyé par Scowl Voir le message
    Alors pourquoi il est marqué dans Cplusplus.com que dans l'eventualité ou tu prends le max pour un int ca fera sizeof(int)*8 + 1 le tableau qui recreva l'int en version tableau de caracteres.

    Ce sont pas des manches la bas car meme xD, il doit y avoir une raison mais laquelle...
    Ils ont fumé, un entier 32 bits prend 10 chiffres (11 si on veut mettre le signe moins), donc ça ferait un tableau de caractère de 11 + 1 caractères.
    Personnellement je prendrais un tableau de 50 caractères et j'utiliserai snprintf (c99)

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Non mais en faîtes il dise cela pour le pire des cas c'est à dire si l'on veut convertir un entier en base 2 et l'afficher mais même dans ce cas avec une plateforme 32 bits, 32 caractères suffiront (y compris le 0 final) alors pourquoi 33?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Non mais en faîtes il dise cela pour le pire des cas c'est à dire si l'on veut convertir un entier en base 2 et l'afficher mais même dans ce cas avec une plateforme 32 bits, 32 caractères suffiront (y compris le 0 final) alors pourquoi 33?
    Non, il faut 32 caractères (0/1)+ le zéro terminal
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Oui c'est vrai j'ai oublié qu'il fallait 1 caractère de plus pour le plus grand nombre négatif, mea culpa.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Miu,
    Citation Envoyé par nicolas.sitbon Voir le message
    Oui c'est vrai j'ai oublié qu'il fallait 1 caractère de plus pour le plus grand nombre négatif, mea culpa.
    Ça n'a rien à voir avec un nombre positif ou négatif :
    32 bits ==> 32 caractères '0' ou '1'

    + 1 caractère pour le zéro final.
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par droggo Voir le message
    Ça n'a rien à voir avec un nombre positif ou négatif :
    Bas si intuitivement, je n'écrirais le 0 du bit de poid fort pour un nombre positif.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  10. #10
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Bas si intuitivement, je n'écrirais le 0 du bit de poid fort pour un nombre positif.
    Alors, si le nombre est transcrit en complément à 2, omettre le 0 de poids fort pour un nombre positif est une erreur
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  11. #11
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Oui c'est vrai je n'y avais pas pensé, je n'ai pas la fonction itoa() sur ma machine et j'imaginais bêtement qu'elle placerait un - quand le nombre est négatif mais en fait ça n'est pas du tout logique. encore mea culpa, donc problème résolu.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  12. #12
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    La formule

    Citation Envoyé par Scowl Voir le message
    sizeof(int)*8 + 1
    est fausse (ou plutot dusons qu'elle marche parfois, mais pas partout). Il ne faut pas utiliser 8 mais CHAR_BIT.
    En effet sur un systeme ou les int et les char sont tout deux sur 32 bits, avec la formule precedente, on obtiendrait 9 (car ici sizeof(int) == sizeof(char) == 1) alors que la reponse attendue est 33.

Discussions similaires

  1. utiliser une variable pour enregistrer la taille max du tableau
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 20/05/2015, 19h31
  2. [Débutant] Utilisation d'un while sur la taille d'un tableau
    Par abel413 dans le forum MATLAB
    Réponses: 20
    Dernier message: 15/07/2013, 11h32
  3. Réponses: 1
    Dernier message: 04/05/2009, 11h08
  4. Réponses: 10
    Dernier message: 03/11/2008, 11h55
  5. question theorique sur java
    Par max25b dans le forum Langage
    Réponses: 13
    Dernier message: 18/05/2006, 14h53

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