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 :

le type char


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 10
    Points
    10
    Par défaut le type char
    pourrait-on m'expliquer pourquoi le type char possède un intervalle de -128 à +127 alors que c'est un type qui ne peut contenir que des lettres et une lettre par variable.

    merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Le type char représente avant tout un entier codé sur 8 bits. La représentation des caractères est un usage très répandu du type char (par l'intermédiaire du code ASCII), mais ça n'est pas le seul.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 10
    Points
    10
    Par défaut le type char
    Peut tu développé stp parce que pour moi, dans le type char on ne peut mettre que des caracteres comme a, b, c ... et qu'un seul caractere par variable jusqu'ici tout va bien, mais pourquoi avoir un intervalle de -128 + 127 et pourquoi est-il possible de modifier cette plage de 0 à 255 en utilisant unsigned char ?

    merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par larreira Voir le message
    Peut tu développé stp parce que pour moi, dans le type char on ne peut mettre que des caracteres comme a, b, c ... et qu'un seul caractere par variable jusqu'ici tout va bien, mais pourquoi avoir un intervalle de -128 + 127 et pourquoi est-il possible de modifier cette plage de 0 à 255 en utilisant unsigned char ?

    merci
    L'ensemble des valeurs que peut prendre le type char appartient a l'ensemble des entiers relatifs. Le type char peut donc etre signé ou unsigned.
    On utilise un nombre pour representer une lettre, ainsi quand ta variable c de type char contient la valeur 61, alors si on utilise la table ascii la variable contiendra 61 mais la correspondance de la table ascii sera A

    http://www.tableascii.com/

    ps:la table ascii est forcement dans les 0-127

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Tout est dans l'interprétation que l'on en fait.

    En C, le type char veut dire "entier signé assez grand pour contenir le code d'un caractère". Et comme il est considéré comme signé et que le plus souvent, on code les nombres négatifs en complément à 2, on a droit à la plage de valeur -128 à 127 (1000000 à 01111111). Dans cette interprétation, 11111111 signifie la valeur -1.
    Si l'on interprète les bits comme un nombre non-signé à la place, on a alors une plage de valeur allant de 0 à 255. (00000000 à 11111111). Dans cette interprétation, 11111111 signifie la valeur 255. En fait, c'est comme si toutes les combinaisons de bits représentant des valeurs négatives étaient "libres" et utilisées pour coder autre chose.

    Heureusement, la plage de valeurs "commune" aux deux interprétations (0 à 127) est codée pareil (00000000 à 01111111), ce qui évite les problèmes de ce côté-ci. En clair, tant que le bit de poids fort est nul, on n'a pas vraiment à faire la différence entre signé et non-signé.
    ... Et bizarrement, le jeu de caractères ASCII pur se limite à cette plage. Sympa non?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Ca reste flou.

  7. #7
    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 larreira Voir le message
    pourrait-on m'expliquer pourquoi le type char possède un intervalle de -128 à +127 alors que c'est un type qui ne peut contenir que des lettres et une lettre par variable.

    merci
    Le type char désigne un objet d'une taille minimale de 8-bit. Si on le considère comme signé (signed char), les valeurs possibles garanties vont de -127 à +127. Si on le considère comme non signé, les valeurs garanties vont de de 0 à 255.

    Un char est garanti de pouvoir contenir la valeur de n'importe quel caractère de l'ensemble des caractère exigés par le C.

    http://delahaye.emmanuel.free.fr/spip.php?article6
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    merci medinoc mais pourquoi avoir un intervalle de -128 à +127 alors que ce ne sont pas des chiffres(on oublie le unsigned) lorsque l'on place la valeur du code ascii d'une lettre, l'intervalle on s'en moque.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Si on le considère comme signé (signed char), les valeurs possibles garanties vont de -127 à +127.
    Petite précision: La raison pour laquelle ça commence à -127 au lieu de -128 est que le standard C ne garantit pas le codage utilisé pour les nombres négatifs. Ça peut être autre chose que le complément à 2...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    tout ce qui nous interesse c'est que le type char puisse juste etre assez grand pour pouvoir placer le code ascii de nos caractere; vous voyer la question que je me pose ?

  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 larreira Voir le message
    merci medinoc mais pourquoi avoir un intervalle de -128 à +127 alors que ce ne sont pas des chiffres(on oublie le unsigned) lorsque l'on place la valeur du code ascii d'une lettre, l'intervalle on s'en moque.
    La 'valeur' d'un code ASCII (ou autre) est une combinaison de bits qui peut toujours s'exprimer par un nombre. Que ce nombre corresponde à un certain glyphe généré par la carte écran lorsquelle reçoit cette valeur, est une considération qui dépasse celle du langage C.
    Pas de Wi-Fi à la maison : CPL

  12. #12
    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 larreira Voir le message
    tout ce qui nous interesse c'est que le type char puisse juste etre assez grand pour pouvoir placer le code ascii de nos caractere; vous voyer la question que je me pose ?
    Et c'est le cas. Quel est le problème ? La taille de 8-bit est le minimum imposé par le C. De plus, c'est utile pour les carctères étendus (accentués, par exemple).
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. variable de type char
    Par Yoshio dans le forum C
    Réponses: 18
    Dernier message: 23/02/2006, 10h48
  2. Réponses: 21
    Dernier message: 20/02/2006, 11h00
  3. Types : char vs. unsigned char
    Par Herode dans le forum C++
    Réponses: 3
    Dernier message: 15/02/2006, 21h39
  4. concaténer un type char à une chaine
    Par Fabs dans le forum C
    Réponses: 8
    Dernier message: 11/11/2005, 15h21
  5. Array subscript has type 'char'
    Par obelix dans le forum C
    Réponses: 11
    Dernier message: 31/10/2005, 18h21

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