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

Algorithmes et structures de données Discussion :

Priorité des opérateurs


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 159
    Points : 106
    Points
    106
    Billets dans le blog
    3
    Par défaut Priorité des opérateurs
    bonjour,

    si on appelle non8, et8 et ou8 pour les opérateurs logiques bit à bit (sur 8, ou 16, ou plus, de bits) quel est la priorité par rapport aux opérateur - + * / et modulo? Dans quel ordre classe-t-on tous ces opérateur?

    quelqu'un a-t-il une idée?

  2. #2
    Expert éminent Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 3 934
    Points : 9 587
    Points
    9 587
    Par défaut
    Bonjour



    Et ben alors ? Ton Google est en panne ?

    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
    Classes de priorités
     
    Priorité 1 (la plus forte):  	() 
    Priorité 2:  	! ++ -- 
    Priorité 3:  	* / % 
    Priorité 4:  	+ - 
    Priorité 5:  	< <= > >= 
    Priorité 6:  	== != 
    Priorité 7:  	&& 
    Priorité 8:  	|| 
    Priorité 9 (la plus faible):  	= += -= *= /= %= 
     
    Evaluation d'opérateurs de la même classe
     
     --> Dans chaque classe de priorité, les opérateurs ont la même priorité. Si nous avons une suite d'opérateurs binaires de la même classe, l'évaluation se fait en passant de la gauche vers la droite dans l'expression.
    <-- Pour les opérateurs unaires (!,++,--) et pour les opérateurs d'affectation (=,+=,-=,*=,/=,%=), l'évaluation se fait de droite à gauche dans l'expression.
    Pour les exemples, va voir la source (clic).
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 159
    Points : 106
    Points
    106
    Billets dans le blog
    3
    Par défaut
    c'est vrai que le C fait comme ça,

    dans mon langage, la priorité des opérateurs, du plus prioritaire au moins Prioritaire, est:
    • expressions parenthèsées
    • puissance (^)
    • moins unaire
    • * / mod
    • + -
    • opérateur de relation (= <> >= > <= <)
    • opérateur logique non (booléen)
    • et logique (booléen)
    • ou logique (booléen)


    dans mon langage, les opérateurs logiques bit à bit sont non8, ou8, et8.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x:=non8 -(2 ^ 63)   ( x vaut alors (2^63) -1)
    x:=non8 -2 (x vaut alors 1)
    si x est le code ASCII d'un chiffre, x et8 15 est la valeur de ce chiffre (masque "et" avec 15=0F en hexadécimal)

    et si je faisait ceci:
    • expressions parenthèsées
    • puissance (^)
    • moins unaire
    • * / mod
    • + -
    • non8
    • et8
    • ou8
    • opérateur de relation (= <> >= > <= <)
    • opérateur logique non (booléen)
    • et logique (booléen)
    • ou logique (booléen)


    qu'en pensez-vous?

  4. #4
    Expert éminent Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 3 934
    Points : 9 587
    Points
    9 587
    Par défaut
    Citation Envoyé par matser Voir le message
    qu'en pensez-vous?
    Pas du bien.
    Et je reste poli.

    Quand on invente un langage (comme le verlan, le langage sms, etc) c'est qu'on parle mal sa propre langue. C'est une forme d'analphabétisme.

    Tu ne donnes aucun élément pour différencier "ET8" et "ET", par exemple. J'ai plutôt l'impression que c'est exactement pareil. Idem pour "OU8"/"OU ou "NON8"/"NON".

    dans mon langage
    C'est un langage qui existe ou que tu crois construire ? A-t-il un nom officiel ?
    Ton langage est faiblement typé. N'est-ce pas ?

    Quelle est la finalité du projet ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 159
    Points : 106
    Points
    106
    Billets dans le blog
    3
    Par défaut
    la différence entre "et8" et "et" est que et8 est un et bit à bit.
    Par exemple:

    11110000 et8 10011010 = 10010000
    x:=non8 -(2 ^ 63) ( x vaut alors (2^63) -1)
    x:=non8 -2 (x vaut alors 1)
    00001111 ou8 00101101=00101111
    dans mon langage, les opérateurs logiques bit à bit sont non8, ou8, et8.
    la finalité est un compilateur

  6. #6
    Expert éminent Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 3 934
    Points : 9 587
    Points
    9 587
    Par défaut
    Ce n'est pas la peine de copier-coller les définitions. On avait compris la première fois.

    Tu n'as pas répondu sur la force du typage. C'est ça qui est important. Les ordinateurs sont des bouliers. Ils ne comprennent que les nombres entiers positifs. Si tu as d'autres objets, comme les nombres négatifs, les nombres à virgules, les lettres, les couleurs, etc, c'est que tu fais une bijection (une correspondance) entre ton espace de valeurs possibles d'entiers naturels vers l'espace des valeurs cibles. Et tout est question d'interprétation.

    Tu sembles considérer que "faux" est 0, et "vrai", toute autre valeur que 0. Mais c'est un choix non-obligatoire. Sous Linux, une application renvoie 0 (donc vrai) quand l'application a bien marché, car il n'y a rien à dire, et un code erreur différent de 0 (donc faux) s'il y a eu un problème; et le code-erreur dénonce le problème. Ce qui est plus intelligent que 0=faux et 1=vrai.

    Je ne suis pas sûr que faire une opération bit à bit sur une variable et se demander si le résultat est vrai ou faux ait du sens. D'où la question du typage. Et de la force du typage.

    De plus, la priorité sur les opérations sont des prophéties auto-réalisatrices. Si tu dis à tes utilisateurs "Voilà comment on doit écrire", ils le feront. Par exemple, dans l'algèbre de Boole, le "ET" et le "OU INCLUSIF" sont totalement miroirs. Il n'y a aucune raison de donner la priorité au "ET". Mais comme cela rappelle les règles de l'algèbre que tout le monde a apprises à l'école primaire, alors on utilise une écriture polynomiale (somme de produit) qui ravit tout le monde. Alors que c'est sans raison d'être. Et certains s'étranglent quand ils voient ceci :
    Phrase qui est fausse dans l'ensemble des entiers mais vraie dans l'ensemble de Boole.
    On pourrait choisir le "OU" prioritaire sur le "ET". Et l'écriture deviendrait :
    Plutôt perturbant. Non ?
    Voilà pourquoi on ne le fait pas.
    C'est une convention; une convention arbitraire.

    Donc choisis ce que tu veux. Tu auras toujours raison.
    Tu peux reprendre les priorités du java qui fait la même distinction que toi. Mais le java est bien typé. Pas sûr que le langage admette le test conditionnel qui permet de dire si "ROUGE" est vrai ou faux; ou si "Q" est positif ou négatif.

    J'espère t'avoir ouvert plus d'horizons qu'obscurci tes idées.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 159
    Points : 106
    Points
    106
    Billets dans le blog
    3
    Par défaut
    un opérateur bit à bit ne donne pas un résultat booléen mais bien un entier. Tu ne connais pas les opérateurs bit à bit?

    https://emmanuel-delahaye.developpez...urs-bit-bit-c/
    https://www.commentcamarche.net/cont...eurs-bit-a-bit
    https://fr.wikiversity.org/wiki/Lang...bit_%C3%A0_bit

    11110000 et8 10011010 = 10010000
    x:=non8 -(2 ^ 63) ( x vaut alors (2^63) -1) (si x est sur 64 bits)
    x:=non8 -2 (x vaut alors 1)
    00001111 ou8 00101101=00101111
    dans mon langage, les opérateurs logiques bit à bit sont non8, ou8, et8.
    et,ou,non sont logiques. et8, ou8, non8 sont arithmétiques

    sinon:
    (a et b) ou c = (a ou c) et (c ou b)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    a |  b |  c |  (a et b) ou c  |  (a ou c) et (c ou b)
    0    0    0           0                            0
    0    0    1           1                            1
    0    1    0           0                            0
    0    1    1           1                            1
    1    0    0           0                            0
    1    0    1           1                            1
    1    1    0           1                            1
    1    1    1           1                            1

  8. #8
    Expert éminent Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 3 934
    Points : 9 587
    Points
    9 587
    Par défaut
    Wow. Je réalise que je suis aller 100 fois trop vite pour toi. On va reprendre pas à pas.
    Quel est ton niveau d'étude, s'il te plaît ?

    et,ou,non sont logiques. et8, ou8, non8 sont arithmétiques
    Le cœur du microprocesseur des ordinateurs, smartphones, etc s'appelle l'Unité Arithmétique et Logique (UAL) car la nature fait de la logique et l'être humain l'interprète comme de l'arithmétique.
    C'est juste une question de point de vue.
    On fait un "OU EXCLUSIF" pour faire la somme de 2 bits (BInary digiTS = chiffres binaires).
    On fait un "ET" pour connaître la retenue de cette somme.
    La soustraction n'existe pas. Dans une représentation en complément à 2, on fait le complément à 1 du deuxième terme, auquel on ajoute 1, pour finir par l'ajouter au premier terme. La limite de l'espace mémoire se charge d'éliminer les bits en trop.
    Exemple sur 4 bits en complément à 2 :
    7 - 3 -> 0111 - 0011 -> 0111 + 1100 + 1 -> 0111 + 1101 -> 10100 -> 0100 -> 4

    Donc faire une trop grande frontière entre logique et arithmétique n'a pas de sens.

    sinon:
    (a et b) ou c = (a ou c) et (c ou b)
    Tu as vérifié, comme je le disais, que le OU est distributif sur le ET autant que le ET est distributif sur le OU, par une table de vérité. Très bien.
    Mais l'information principale que je voulais transmettre est que la priorité d'une opération par rapport à l'autre n'est que question de convention préalable.
    Le "+" peut vouloir dire, en fonction des contextes, "addition" ou "OU INCLUSIF" ou "concaténation" ou "mélange"... etc.
    Le "." ou "*" peut vouloir dire "produit" ou "ET" ou "autre mélange", etc.

    un opérateur bit à bit ne donne pas un résultat booléen mais bien un entier.
    Vraiment ? Mais dans une architecture 64 bits, un booléen prend 64 bits d'espace mémoire. Alors comment fais-tu la différence entre un booléen et un entier ?
    Il faut arrêter de croire qu'il n'y a qu'une façon de voir les choses. Je le répète : tout est dans l'interprétation.
    1001 code-t-il pour 9 ou pour -7 ?

    la finalité est un compilateur
    De quel langage vers quelle architecture électronique ?
    Certains étudiants fabriquent des compilateurs brainfuck pour s'entraîner. C'est plus simple. Et toi ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 159
    Points : 106
    Points
    106
    Billets dans le blog
    3
    Par défaut
    j'ai trouvé ça sur internet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MOV AL, 01100001b 
    AND AL, 11011111b --> Nous obtenons 01000001b
    OR AL, 01110110b  --> Nous obtenons 01110111b
    NOT AL            --> Nous obtenons 10001000b 
    XOR AL, 01010101b --> Nous obtenons 11011101b
    XOR BX, BX        --> Nous obtenons 00000000b
    renseigne-toi bien sur les opérateurs bit à bit et viens me voir après

  10. #10
    Expert éminent Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 3 934
    Points : 9 587
    Points
    9 587
    Par défaut
    Tu progresses à reculons

    En quelle classe es-tu ?

    Pourquoi as-tu copié-collé cette banalité ?
    En quoi répond-elle aux questions ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 159
    Points : 106
    Points
    106
    Billets dans le blog
    3
    Par défaut
    par exemple:
    50 s’écrit f2 en hexa
    15 s'écrit 0f en hexa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ent a:=50;
    ent b:=15;
    ent c;
    c:=a et8 b;
    c aura pour valeur 2 (=&h02) (=&b00000010)
    a:=&b10101111;
    b:=&b00001111;
    c:= a ou8 b
    c aura pour valeur 175 (=&b10101111)
    pour affecter à b l'opposé de a:
    finalement, je mettrais à et8 ou8 et non8 une priorité supérieure à * et /
    as-tu cliqué sur ces liens?(qui explique ce que c'est une opération bit à bit)
    https://emmanuel-delahaye.developpez...urs-bit-bit-c/
    https://www.commentcamarche.net/cont...eurs-bit-a-bit
    https://fr.wikiversity.org/wiki/Lang...bit_%C3%A0_bit
    si tu ne sait toujours pas ce qu'est une opération bit à bit, j'abandonnerai cette discussion.

  12. #12
    Expert éminent Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 3 934
    Points : 9 587
    Points
    9 587
    Par défaut
    50 s’écrit f2 en hexa
    Faux.
    f216 = f16*1610 + 216 = 1510*1610 + 210 = 24210
    3216 = 316*1610 + 216 = 310*1610 + 210 = 5010
    Le point positif est que tu as une grosse marche de progression.

    De là à créer un compilateur ...

    C'est moi qui vais cesser de t'aiguiller.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  13. #13
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 159
    Points : 106
    Points
    106
    Billets dans le blog
    3

  14. #14
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    24 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 24 794
    Points : 168 365
    Points
    168 365
    Par défaut
    Et on est censés faire quoi de ce PDF ? Qu'est-ce qu'il est censé décrire ?
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  15. #15
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 159
    Points : 106
    Points
    106
    Billets dans le blog
    3
    Par défaut
    c'est une grammaire hors contexte
    ça décrit la syntaxe du langage
    la flèche se lit "peut prendre la forme de"
    les symboles en gras sont les terminaux (qui n'apparaissent jamais à gauche d'une flèche)
    les autres sont les non-terminaux (qui apparaissent au moins une fois à gauche d'une flèche)
    voir purple dragon book ("compilateurs principes, technique,et outils")

  16. #16
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    août 2013
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : août 2013
    Messages : 386
    Points : 1 797
    Points
    1 797
    Par défaut
    Bonjour.
    Je suis surpris de la tournure que prend cette discussion... ce n'est pas dans l'habitude de ce site, orienté vers l'entraide et pas sur le conflit.
    Je vous souhaite de trouver un compromis qui vous permet d'en sortir honorablement.
    Cordialement.
    N'hésitez pas à consulter mon mémento sur la programmation en VBA pour EXCEL tome 1.
    Ou le tome 2 qui aborde la programmation en mode graphique avec un exemple de programmation d'un jeu d'arcade en VBA
    Et pour les curieux, le tome 3 qui aborde le problème du voyageur de commerce.
    Le tome 4 est consacré à la cryptologie en VBA et satisfera ceux qui ont besoin de confidentialité.
    Vous découvrirez dans le tome 5 les fonctions SQL pour gérer les tableaux de données et l'application Sentinelle qui veille sur vos fichiers.
    Le tome 6, dernier de la série, vous apprendra à créer des fonctions pour simplifier la vie des utilisateurs.
    Le Crible Quadratique donne toutes les fonctions pour les opérations sur les grands nombres en VBA.
    N'oubliez pas de consulter les FAQ EXCEL et les cours et tutoriels comme par exemple celui de Jean-Marc RABILLOUD qui est très complet.

  17. #17
    Membre régulier

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 159
    Points : 106
    Points
    106
    Billets dans le blog
    3
    Par défaut
    cette discussion est résolue:
    du plus prioritaire au moins prioritaire
    ( )
    ^
    - unaire non8 (unaire)
    et8
    ou8
    * / mod
    + -
    opérateur de relation < <= <> = >= >
    non (unaire)
    et
    ou
    le 8 que j'ai ajouté veut dire "sur 8 bit". ce ne sont pas les opérateur qui donne un booléen mais une opération entre entiers, qui donne un entier.

  18. #18
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    24 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 24 794
    Points : 168 365
    Points
    168 365
    Par défaut
    Donc, en fait, ta question, c'est de savoir la priorité à affecter aux opérateurs binaires (AND, NOT, OR) par rapport aux opérateurs arithmétiques (+, -, *, /) ?

    Pour y répondre, pense à une condition comme : a + b == c || c < d. Tu dois d'abord effectuer les opérations arithmétiques, puis les comparaisons, puis les combinaisons binaires.
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

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

Discussions similaires

  1. Priorité des opérateurs % et ++
    Par G3G3 dans le forum Débuter
    Réponses: 16
    Dernier message: 12/02/2008, 09h40
  2. [OCaml & F#] Priorité des opérateurs
    Par SpiceGuid dans le forum Caml
    Réponses: 7
    Dernier message: 01/01/2008, 15h00
  3. priorité des opérateurs
    Par new_wave dans le forum SQL
    Réponses: 13
    Dernier message: 08/11/2007, 21h44
  4. Priorité des opérateurs
    Par neuromencien dans le forum Langage
    Réponses: 3
    Dernier message: 14/05/2007, 17h06
  5. Réponses: 3
    Dernier message: 31/08/2006, 10h39

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