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 :

XOR entre 2 tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Par défaut XOR entre 2 tableaux
    Bonjour à tous,

    Le titre résume tout, je voudrai savoir si il y a une fonction prédéfinie en C (pourquoi je cherche une fonction prédéfinie en C? bein c'est simple c'est généralement ces fonctions qui soient les plus optimal) qui puisse effectuer une opération de XOR sur des éléments entier de 2 tableaux.

    Je vous remercie.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    http://www.developpez.net/forums/d12...ne-caracteres/

    Cette discussion devrait répondre à ta question.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Par défaut
    merci, j'ai vu cette discution, mais bon, faire une boucle puis prendre les elements un par un, c'est simple, mais je ne sais pas si il y a une fonction prédéfinie en C qui puisse faire ce genre de traitement en minimisant le temps de calcule.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Ce qui était ressorti de cette discussion était que ça n'existe pas en standard.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Par défaut
    D'accord, parfait.

    Je voudrai juste posé une question, est ce que le décalage des elements d'un tableau est tres couteux en terme de temps CPU? si au moins la taille de ce tableau est égale à 20.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Pourrais-tu préciser ton problème, peut-être avec un exemple avec un tableau de quelques éléments, stp ?

  7. #7
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    Et le contexte. Il y a neuf chances sur dix pour que ton compilateur optimise le calcul de la même manière, quelle que soit l'écriture que tu choisis (mais si tu es dans le cas restant, c'est bon à savoir).

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Par défaut
    Merci pour votre participation,
    @ManusDei: A ce que je lis, donc pourquoi utiliser la syntaxe du langage, sachant que le compilateur va executer mes block d'instruction autrement? avec ça, je pense que les mecs qui ont fait le C aurait peut etre dù créer un langage de programmation en "langage humain" si tu vois où je veux en-venir.
    @bktero: ce que je veux faire c'est optimiser mon code source, j'ai un traitement qui fesait un décalage des elements d'un tableau dés qu'il trouve qu'il y a une anomalie avec ces elements, donc moi j'essai de voir si je ne pourrai pas le faire autrement, en changeant juste la valeur des elements qui me font cet anomalie avec l'opération de XOR, ainsi je voulais savoir si cette opération est plus efficace en terme de temps d'execution du CPU que de faire un décalage des éléments.

    j'espère que j'etais clair . En vous remerciant encore une fois.

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    j'espère que j'etais clair
    Pas trop

    @ManusDei: A ce que je lis, donc pourquoi utiliser la syntaxe du langage, sachant que le compilateur va executer mes block d'instruction autrement? avec ça, je pense que les mecs qui ont fait le C aurait peut etre dù créer un langage de programmation en "langage humain" si tu vois où je veux en-venir.
    Pourquoi utiliser la syntaxe du langage ? Ben parce que sinon tu ne pourras pas compiler ton programme !

    Le compilateur n'exécute rien, il transforme ton code C en langage machine. Il procède à des optimisations, pour améliorer la vitesse / la taille du programme qu'il crée.

    Pourquoi ? Justement parce qu'ils cherchaient à faire un langage proche de la machine. C'est l'intérêt du langage C ! Enfin, le code en C ressemble quand même beaucoup plus à du langage humain que le code assembleur généré par ton compilateur !



    @bktero: ce que je veux faire c'est optimiser mon code source, j'ai un traitement qui fesait un décalage des elements d'un tableau dés qu'il trouve qu'il y a une anomalie avec ces elements, donc moi j'essai de voir si je ne pourrai pas le faire autrement, en changeant juste la valeur des elements qui me font cet anomalie avec l'opération de XOR, ainsi je voulais savoir si cette opération est plus efficace en terme de temps d'execution du CPU que de faire un décalage des éléments.
    Il s'agit ici d'optimiser l'algorithme. Les deux solutions que tu proposes n'ont rien à voir. Dans la première, tu décales les éléments de ton tableau pour faire disparaitre les éléments à la mauvaise valeur. Dans la seconde, tu les mets à 0.

    Le décalage des éléments est forcément extrêmement couteux surtout si ton tableau est très grand et qu'il y a beaucoup de valeurs erronées. Sauf que derrière, les traitements sur le tableau modifié ne seront pas du tout les mêmes !

    Si tu souhaites avoir un tableau allégé, pourquoi ne pas le recopier dans un second tableau, en prenant soin de ne pas copier les mauvaises valeurs ? Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
        int original[] = {8, 2, 3, 10, 15, 7, 10, 1, 0};
        // On souhaite supprimer le "10" du tableau
     
        int copie[sizeof(original) / sizeof(original[0])] = {0};
     
        unsigned int i,j;
     
        for(j=i=0; i<sizeof(original) / sizeof(original[0]); i++)
        {
            if( original[i]!=10)
            {
                copie[j++] = original[i];
            }
        }
     
        // Verification
        for(i=0; i<j; i++)
            printf("%d ", copie[i]);
     
        return j; // il faut conserver le nombre d'elements dans le nouveau tableau
    }

    PS : quand tu dis "éliminer avec le XOR", comment procèdes-tu ?

  10. #10
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    Citation Envoyé par Umlist Voir le message
    @ManusDei: A ce que je lis, donc pourquoi utiliser la syntaxe du langage, sachant que le compilateur va executer mes block d'instruction autrement? avec ça, je pense que les mecs qui ont fait le C aurait peut etre dù créer un langage de programmation en "langage humain" si tu vois où je veux en-venir.
    En fait, le compilateur ne fait pas que traduire ton code C en code Assembleur. Il commence par vérifier la syntaxe (d'où les "syntax error"). Ensuite, il va traduire ton code C (ou autre langage) dans un langage intermédiaire. A partir de ce langage intermédiaire, il va reconnaitre des structures particulières, et les optimiser.
    Par exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=tab[i];
    i=i+1;
    y=tab[i];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x=tab[i];
    y=tab[i+1];
    Si le programme renvoie juste x et y, ces deux codes sont équivalents. Et le second est plus rapide que le premier (y a des mécanismes "hardware" pour s'assurer de ça).
    Dans GCC, quelque part, tu as un bout de code qui lit ce que tu as écrit, s'il voit le premier bout de code, il le remplace par le second à la compilation.

    GCC a maintenant plus de 25 ans, donc ça fait 25 ans que des gars rajoutent des optimisations comme celle là

    Bien sûr, tout n'est pas optimisable automatiquement, il reste toujours du code qui n'est optimisable qu'à la main, mais pour un XOR sur deux tableaux, je doute que ça ne soit pas déjà fait dans GCC

Discussions similaires

  1. [c#2] affectation entre deux tableaux en c#
    Par mstic dans le forum C#
    Réponses: 4
    Dernier message: 16/07/2007, 10h44
  2. Recherche croisées entre différents tableaux
    Par solorac dans le forum Excel
    Réponses: 2
    Dernier message: 12/06/2007, 10h49
  3. [Débutant] Test d'équivalence entre deux tableaux ?
    Par kmikase dans le forum Fortran
    Réponses: 5
    Dernier message: 13/01/2007, 16h53
  4. [VBA-E]:copier entre deux tableaux sur deux classeurs
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 39
    Dernier message: 28/06/2006, 15h39
  5. Réponses: 8
    Dernier message: 17/05/2006, 10h51

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