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 :

Opérations arithmétiques sur les caractères


Sujet :

C

  1. #1
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut Opérations arithmétiques sur les caractères
    Bonjour,

    Je cherche à valider un comportement C++ qui serait peut-être défini par référence à la norme C.

    Y a-t-il des garanties sur les opérations arithmétiques avec des char ? Par exemple, peut-on être certains que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    '0' + 1 == '1' // Il me semble que oui, mais je n'ai pas trouvé dans le standard
    'a' + 1 == 'b' // Il me semble que non
    'A' + 1 == 'B' // Idem
    Merci
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Bonjour,

    Dans le draft C99 :
    5.2 Environmental considerations
    5.2.1 Character sets
    (...)
    In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.
    Il n'y a pas de précision pour les chiffres.
    :wq

  3. #3
    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
    Coa,

    Non, c'est dépendant de l'encodage (pour certains encodages, les caractères ne sont pas consécutifs, pour les chiffres, je ne sais plus, c'est loin ).

    Par contre, c'est vrai en ASCII.
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Ah, merci, je n'avais pas pensé du tout à lire cette section.
    Donc, tel que je lis ça, c'est bien garanti pour les chiffres, mais pas pour les lettres.

    the 10 decimal digits
    0 1 2 3 4 5 6 7 8 9
    [...]
    In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Je pense que tout ce que tu as proposé est possible. Même pour les lettres, car si tu affiche sur l'ecran '0' + 1 ; il affiche le caractère suivant soit '1'
    Pareil pour les lettres, car dans la table d'encodage ( ascii ) , ce sont des caractères qui se suivent.
    L'ordinateur derrière ne voit que des chiffres de toute façon , pour lui '0' sera un 48 et 'a' un 97.
    Et il va les traiter comme des chiffres ...

    ( Pardon , pas vu que vous cherchiez un truc précis à 100% ) ( pour moi il me semblez que c'était toujours comme ça ) ( bien sur dépendant de l'encodage )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Bonjour,

    Citation Envoyé par dapounet Voir le message
    Il n'y a pas de précision pour les chiffres.
    Pardon je voulais dire « lettres ».
    :wq

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Ah, merci, je n'avais pas pensé du tout à lire cette section.
    Donc, tel que je lis ça, c'est bien garanti pour les chiffres, mais pas pour les lettres.
    Exact. Les principales contraintes sur les charsets et le choix de char signé ou non:
    - le jeu de caractère de base a pour codet des valeurs positives (donc une implémentation qui utilisant EBCDIC comme charset a un char non signé); ces valeurs sont les mêmes dans tous les charsets (je ne suis pas sûr que ce soit les mêmes entre char et wchar_t; donc char en EBCDIC + variantes et wchar_t en UCS32 est possible), et disponible dans le mode par défauts pour les charsets modaux;
    - le codet 0 désigne le caractère nul dans tous les modes;
    - les codets des chiffres sont consécutifs et dans le bon ordre;
    - (à vérifier) wchar_t est un codage ou 1 codet = 1 wchar_t (donc UTF-16 devrait être interdit pour wchar_t, mais on le rencontre).

    Note: j'avais écrit ceci sur le sujet. Je suis en train de le reprendre et de le complèter. Mais c'est toujours un brouillon; ça fait 28 pages A4 et je n'en suis pas encore à la partie sur le C et le C++.

    Citation Envoyé par LittleWhite Voir le message
    Pareil pour les lettres, car dans la table d'encodage ( ascii ) , ce sont des caractères qui se suivent.
    Mais dans d'autres charsets (les multiples variantes d'EBCDIC par exemple) ce n'est pas le cas.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/10/2014, 12h34
  2. Opérations arithmétiques sur les Listes
    Par yoshik dans le forum Général Python
    Réponses: 33
    Dernier message: 17/06/2009, 18h39
  3. Opérations arithmétiques sur matrices creuses
    Par fdl1508 dans le forum Pascal
    Réponses: 3
    Dernier message: 25/12/2007, 12h19
  4. Réponses: 4
    Dernier message: 03/07/2007, 11h21
  5. [RegEx] preg_replace : explications sur les caractères spéciaux
    Par Anduriel dans le forum Langage
    Réponses: 6
    Dernier message: 05/10/2005, 21h35

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