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 :

explication syntaxe C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Par défaut explication syntaxe C++
    Bonjour,
    j'aimerai savoir la signification de la syntaxe suivante :

    = (ulTmp < 0x80000000UL) ? ulTmp : (-(~((long) ulTmp)) -1);
    le 2e cas en fait, tous ces symboles ??

    merci

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(ulTmp < 0x80000000UL)
    {
        //ne rien changer
    }
    else
    {
        long lTmp = static_cast< long >(ulTmp);//Cast de unsigned à signed
        long notTmp = ~lTmp; //complément
        long negTmp = -notTmp; //négatif (complément à 2)
        ulTmp = negTmp - 1; //Annulation du +1 dû au complément à 2
    }
    En fait pour moi, ce code à l'air de prendre le complément du complément (ce qui a l'air d'être le nombre lui-même, en fait). Mais le calcul a peut-être bien un effet de bord sur le bit de poids fort.

    Peut-être est-ce une extension de signe si tu as des long de 64 bits...
    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.

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Par défaut
    bah justement la 1ere fois que je fais ce calcul ca passe , et la 2e fois ca plante à cette ligne !

  4. #4
    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
    En quoi ça "plante" ??

    Et quelles sont les lignes précédente et suivante?

    ulTmp est bien une variable locale ?
    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.

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Par défaut
    unsigned long ulTmp;
    unsigned long ulTmp2;

    long posChamp=0;
    int temp1 = 0;
    int temp2 = 0;
    int temp3 = 0;
    int temp4 = 0;
    InfosFichier* psFichier = NULL;
    unsigned short usCr = OK;

    MC_TraceEcrire(TR_COM_COM,TR_MOD_TAB,TR_TYP_DEB, "usGTInitTabChp");

    /* Allocation mémoire. */
    if (usResultat == 0) {
    g_stTabChp = (t_TabChp *) MC_Allouer(ulNombre * sizeof(t_TabChp));
    if (g_stTabChp == NULL) usResultat = ERR_ALLOCATION_MEMOIRE;
    else g_ulNbTabChp = ulNombre;
    }

    MC_TraceEcrire(TR_COM_COM,TR_MOD_TAB,TR_TYP_ECR, "g_stTabChp = %p, g_ulNbTabChp = %hu", g_stTabChp, g_ulNbTabChp);

    /* Initialisation du contenu. */
    for (i = 0; i < ulNombre && usResultat == 0; i++) {
    usResultat |= MC_usLireSignedLong (usNumFichierTable, &g_stTabChp[i].bObligatoire); // suppression : usResultat |= MC_usLireSignedLong (usNumFichierTable, &g_stTabChp[i].bObligatoire); pour modification
    usResultat |= MC_usLireUnsignedShort (usNumFichierTable, &g_stTabChp[i].usLgMin);
    usResultat |= MC_usLireUnsignedShort (usNumFichierTable, &g_stTabChp[i].usLgMax);
    usResultat |= MC_usLireSignedChar (usNumFichierTable, &g_stTabChp[i].cTypeChamp);





    /* On se positionne sur le bon fichier */
    posChamp=0;
    temp1 = 0;
    temp2 = 0;
    temp3 = 0;
    temp4 = 0;
    psFichier = NULL;

    usCr = usRechercherFichier(usNumFichierTable,&psFichier);

    /* Enregistrement de la position du champs dans le fichier */
    if ( (posChamp=ftell(psFichier->pFichier)) <0)
    usCr = ERR_FICHIER_STRUCTURE;

    if (usCr == OK) {
    temp1 = fgetc(psFichier->pFichier);
    temp2 = fgetc(psFichier->pFichier);
    temp3 = fgetc(psFichier->pFichier);
    temp4 = fgetc(psFichier->pFichier);

    if (temp1==EOF || temp2==EOF || temp3==EOF || temp4==EOF)
    usCr = ERR_FICHIER_STRUCTURE;

    if (usCr == OK) {






    //int reservation_pulValeur = MultiByteToWideChar (CP_ACP, 0, buf, -1, NULL, 0) ;
    //LPWSTR pulValeur_unicode = new WCHAR[reservation_pulValeur];
    //MultiByteToWideChar (CP_ACP, 0, buf, -1, pulValeur_unicode, reservation_pulValeur) ;

    //MessageBox (NULL, pulValeur_unicode, TEXT("iPaqDev"), MB_OK);


    MessageBox (NULL, TEXT("debutPul"), TEXT("iPaqDev"), MB_OK);

    if (i==1)
    {
    ulTmp2 = (((unsigned short)temp1)<<24) +
    (((unsigned short)temp2)<<16) +
    (((unsigned short)temp3)<<8) +
    (unsigned short)temp4;
    }else
    {

    ulTmp = (((unsigned short)temp1)<<24) +
    (((unsigned short)temp2)<<16) +
    (((unsigned short)temp3)<<8) +
    (unsigned short)temp4;
    }


    MessageBox (NULL, TEXT("finPul"), TEXT("iPaqDev"), MB_OK);

    }

    }



    //TODO : usCr = MC_usLireUnsignedLong(usNumFichierBinaire,&ulTmp);

    if (usCr == OK) {

    MessageBox (NULL, TEXT("POUET 1"), TEXT("iPaqDev"), MB_OK);

    if (i!=1)
    {
    g_stTabChp[i].bOccurence = (ulTmp < 0x80000000UL) ? ulTmp : (-(~((long) ulTmp)) -1);
    }
    else
    {
    g_stTabChp[i].bOccurence = (ulTmp2 < 0x80000000UL) ? ulTmp2 : (-(~((long) ulTmp2)) -1);
    }
    MessageBox (NULL, TEXT("POUET 2"), TEXT("iPaqDev"), MB_OK);
    }
    free(psFichier);
    }

    quand i=0 ca passe, quand on passe à i=1 ca ne passe plus, même en essayant avec une autre variable (ulTmp2)

  6. #6
    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
    À tous les coups, le problème n'est pas à droite du =, mais à sa gauche:
    g_stTabChp[i] doit représenter une adresse invalide.
    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.

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

Discussions similaires

  1. explication syntaxe (facile) filereference
    Par uowis dans le forum Web
    Réponses: 0
    Dernier message: 20/10/2008, 19h07
  2. explication syntaxe void far nom_fonction
    Par waldoun dans le forum C
    Réponses: 2
    Dernier message: 16/05/2007, 19h05
  3. explication syntaxe HTTP_POST_VARS
    Par iag_1980 dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2007, 11h44
  4. Explication Syntaxe , généricité ?
    Par elitost dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 11h28
  5. explication syntaxe requete sur pgsql
    Par alain.lc dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/12/2004, 10h24

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