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 :

variable 16 bits ?


Sujet :

C++

Vue hybride

tibo7 variable 16 bits ? 02/06/2008, 11h48
ram-0000 En général oui mais tu peux... 02/06/2008, 11h54
tibo7 short int tableau[1] =... 02/06/2008, 12h05
ram-0000 En général, un port série est... 02/06/2008, 12h11
zais_ethael Je n'ai jamais utilisé de... 02/06/2008, 12h19
Emmanuel Deloget Pas tout à fait: if... 03/06/2008, 13h14
Médinoc tibo7: En clair, tu cherches... 03/06/2008, 13h43
Sylvain Togni Chez moi... 03/06/2008, 15h15
koala01 C'est exactement la raison... 03/06/2008, 15h19
Emmanuel Deloget Manque le bit de signe. De... 03/06/2008, 16h46
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut variable 16 bits ?
    Bonjour,

    Quelle sont les variables que l'on peux mettre sous builder sous 16 bits ?
    J'ai entendu parler de short int, est-ce une 16 bits ?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    En général oui mais tu peux faire le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(sizeof(short int) == 2)
    {
    ...
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    short int tableau[1] = {0x0000}
    ComPort1->Write(tableau, 1);
    J'ai fait le test avec ça et malheureusement ça ne marche pas mais je sais pourquoi.. mon port série est configuré en 8 bits, ne peut-on pas le mettre en 16 ?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    En général, un port série est utilisé pour envoyer des octets (donc 8 bits). Je ne connais pas de ports série sur lequel tu peux envoyer des words (2 octets)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je n'ai jamais utilisé de port série mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    short int tableau[1] = {0x0000}
    ComPort1->Write((char*)tableau, sizeof(short int)*1);
    ça revient pas au même?

    Sinon, quand on veut un type codé sur un certain nombre de bits ce n'est pas une bonne idée de faire des suppositions sur le types normaux, ils sont susceptibles de changer quand on bascule vers une autre archi/un autre os/voire même un autre compilo. Il existe des typedefs pour ça dans un grand nombre de biblios y compris dans la biblio standard (si elle est suffisamment à jour). Dans ce dernier cas, le header à inclure est <stdint.h>.

  6. #6
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    en effet, ça reviens au même mais bon but était d'envoyer un signal de 16 bits. Bref ce n'est pas possible.

    Autre question, peut-on mettre le port TX au niveau logique 1 ou 0 ? (sans avoir de trames, bit de start ou bit de stop...)

  7. #7
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    En général oui mais tu peux faire le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(sizeof(short int) == 2)
    {
    ...
    }
    Pas tout à fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (std::numeric_limits<short>::digit == 16)
    {
    }
    Permet d'être plus sûr, étant donné que sizeof() renvoie un nombre de byte, et que le nombre de bits d'un byte n'est pas défini (et vous n'avez certainement pas eu le plaisir de bosser avec des bytes de 32 bits...)

    Quoi qu'il en soit, la taille d'un short n'est pas définie par le standard C++: elle peut donc varier d'une configuration à l'autre. Seule la relation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (sizeof(char) == 1) <= sizeof(short) <= sizeof(int) <= sizeof(long)
    est définie.

    Si ton compilateur est compatible avec le standard C99 (ce n'est pas le cas de Visual C++ .Net 2005), tu peux utiliser les types intN_t (int8_t, int16_t, ...) et uintN_t (uint8_t, uint16_t) définis dans <stdint.h>. La prochaine norme C++ définira aussi ces types (ce qui n'est pas le cas dans la version 2003 du standard).

    Sinon, tu peux aussi décider de te limiter à un compilateur que tu connais, et vogue la galère. Une fois le programme compilé, la taille des types ne change pas, donc si elle est connue au moment de la compilation, tout est ok.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    tibo7: En clair, tu cherches à communiquer par port série avec un truc qui n'est pas compatible RS232 ?
    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.

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Pas tout à fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (std::numeric_limits<short>::digit == 16)
    {
    }
    Chez moi std::numeric_limits<short>::digit vaut 15 et n'a peu de rapport avec la taille d'un type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (sizeof(short)*CHAR_BIT == 16)
    {
    }

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    C'est exactement la raison pour laquelle on déconseille de faire la moindre supposition sur la taille des types de base...

    C'est aussi la raison pour laquelle je proposais d'utiliser un bitset.

    Ainsi, si tu crée un bitset d'une taille de... 16 bits en l'occurrence, tu place les différents bits à la valeur qui t'intéresse, puis il ne te reste "plus qu'à" les envoyer dans l'ordre dans lequel ils sont attendus
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par Sylvain Togni Voir le message
    Chez moi std::numeric_limits<short>::digit vaut 15 et n'a peu de rapport avec la taille d'un type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (sizeof(short)*CHAR_BIT == 16)
    {
    }
    Manque le bit de signe. De toute façon, la valeur de digits dépends des implémentation. La "solution": passer par le même type, mais non signé.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/05/2011, 21h22
  2. [Débutant] Type variable 64 bits
    Par crimetime dans le forum C
    Réponses: 8
    Dernier message: 04/06/2010, 17h50
  3. déclaration de variables de 16, 32 et 128 bits
    Par samipate dans le forum C++
    Réponses: 10
    Dernier message: 30/12/2004, 22h33
  4. tester l'état d'un bit d'une variable
    Par jphi5 dans le forum C
    Réponses: 5
    Dernier message: 15/09/2003, 13h17
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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