Bonjour,
j'aimerai savoir la signification de la syntaxe suivante :
le 2e cas en fait, tous ces symboles ??= (ulTmp < 0x80000000UL) ? ulTmp : (-(~((long) ulTmp)) -1);![]()
merci![]()
Bonjour,
j'aimerai savoir la signification de la syntaxe suivante :
le 2e cas en fait, tous ces symboles ??= (ulTmp < 0x80000000UL) ? ulTmp : (-(~((long) ulTmp)) -1);![]()
merci![]()
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.
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 }
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.
bah justement la 1ere fois que je fais ce calcul ca passe , et la 2e fois ca plante à cette ligne !
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.
quand i=0 ca passe, quand on passe à i=1 ca ne passe plus, même en essayant avec une autre variable (ulTmp2)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);
}
À 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.
Partager