Utilité du ||

Utilité du || - C - Programmation

Marsh Posté le 05-12-2005 à 16:30:22    

Bonjour !
 
Ma question est toute simple : Existe-t-il une opération où un || (ou logique) ne pourrait pas être remplacé par un | ? Pour le && c'est évident (a = 0x10 , b = 0x1), a&b = 0 ; a&&b == TRUE. Mais pour || ? Je suis d'accord que d'un point de vue conceptuel c'est plus clair (|| , && , etc.) mais la question n'est pas là ;)
 
Merci   :hello:

Reply

Marsh Posté le 05-12-2005 à 16:30:22   

Reply

Marsh Posté le 05-12-2005 à 16:32:55    

hein ?
 
 
| = ou logique sur des bits
 
|| = verification de condition  
 
rien a voir with teh choucroute

Reply

Marsh Posté le 05-12-2005 à 16:33:13    

enfin jvois meme pas pkoi tu reflechis a ca ?

Reply

Marsh Posté le 05-12-2005 à 16:35:10    

__
|| = 3,14...
 
__
|| = poutre en I
¯¯


Message édité par art_dupond le 05-12-2005 à 16:35:59
Reply

Marsh Posté le 05-12-2005 à 16:35:54    

1point pruneaux pour ce gag pictographique

Reply

Marsh Posté le 05-12-2005 à 16:36:39    

ah ce n'était pas un jeu où il faut chaque fois rajouter une barre :??:

Reply

Marsh Posté le 05-12-2005 à 16:37:30    

Caedes a écrit :

Bonjour !
 
Ma question est toute simple : Existe-t-il une opération où un || (ou logique) ne pourrait pas être remplacé par un | ? Pour le && c'est évident (a = 0x10 , b = 0x1), a&b = 0 ; a&&b == TRUE. Mais pour || ? Je suis d'accord que d'un point de vue conceptuel c'est plus clair (|| , && , etc.) mais la question n'est pas là ;)
 
Merci   :hello:


Je doute fort qu'utiliser "|" permette de faire du short-circuiting  [:khamal]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-12-2005 à 16:37:54    

chrisbk a écrit :

hein ?
 
 
| = ou logique sur des bits
 
|| = verification de condition  
 
rien a voir with teh choucroute


 
oui ca je sais , merci  ;)  
 

chrisbk a écrit :

enfin jvois meme pas pkoi tu reflechis a ca ?


Parce que j'ai recu du code où tous les ou logiques (||) ont été codés avec des | et ca m'a surpris...  
En y réfléchissant ca fonctionne correctement. Et je pose donc la question : "Dans quel cas ne pourrait-on pas remplacer le || par un |" ?
 

Reply

Marsh Posté le 05-12-2005 à 16:39:36    

chrisbk a écrit :

enfin jvois meme pas pkoi tu reflechis a ca ?


 
Ben pour optimiser, voyons  [:petrus75]

Message cité 1 fois
Message édité par Elmoricq le 05-12-2005 à 16:40:21
Reply

Marsh Posté le 05-12-2005 à 16:40:18    

Caedes a écrit :

Parce que j'ai recu du code où tous les ou logiques (||) ont été codés avec des | et ca m'a surpris...  
En y réfléchissant ca fonctionne correctement. Et je pose donc la question : "Dans quel cas ne pourrait-on pas remplacer le || par un |" ?


DANS TOUS §§§
SHORT-CIRCUITING §§§


Message édité par masklinn le 05-12-2005 à 16:40:45

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-12-2005 à 16:40:18   

Reply

Marsh Posté le 05-12-2005 à 16:40:49    

Elmoricq a écrit :

Ben pour optimiser, voyons  [:petrus75]  


 
t'optimise rien, (cf post de masklinn) et tu risques les emmerdes si t'es un adepte de la fenantise, genre
 

Code :
  1. truc * prout = ...;
  2. if (prout && prout->youpi() == true)
  3. {
  4. ...
  5. }

Reply

Marsh Posté le 05-12-2005 à 16:42:28    

chrisbk a écrit :

t'optimise rien, (cf post de masklinn) et tu risques les emmerdes si t'es un adepte de la fenantise, genre
 

Code :
  1. truc * prout = ...;
  2. if (prout && prout->youpi() == true)
  3. {
  4. ...
  5. }



Je pense qu'il était ironique :o
Ce genre de considérations étant un exemple parfait de premature optimisations qui optimisent rien du tout (sauf ptet en VB -- qui n'a pas de short-circuit sur And et Or) [:pingouino]
 
Sachant que dans VB.Net ils ont trouvé le moyen non pas de short-circuiter And et Or mais d'ajouter AndAlso et OrElse, qui sont identique à And et Or mais avec short-circuit http://membres.lycos.fr/angel2k/petrus/petruseaf.gif


Message édité par masklinn le 05-12-2005 à 16:43:44

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-12-2005 à 16:42:32    

J'ai déjà écrit que ca ne fonctionnerait pas pour && / &... (bon ok je n'ai pas été très clair dans mon post) ..
 
tu parles de "pour optimiser" : c'est bien le pire : j'avais avant dans mon code des || et le gaillard me les a remplacé par des | ... comme si c'était plus rapide. :??:

Reply

Marsh Posté le 05-12-2005 à 16:42:41    

chrisbk a écrit :

t'optimise rien, (cf post de masklinn) et tu risques les emmerdes si t'es un adepte de la fenantise, genre


 
Euh, smiley petrus75 == phrase foireuse, second degré toussa

Message cité 1 fois
Message édité par Elmoricq le 05-12-2005 à 16:43:18
Reply

Marsh Posté le 05-12-2005 à 16:43:30    

Caedes a écrit :


tu parles de "pour optimiser" : c'est bien le pire : j'avais avant dans mon code des || et le gaillard me les a remplacé par des | ... comme si c'était plus rapide. :??:


 
c'est une andouille le gus :d

Reply

Marsh Posté le 05-12-2005 à 16:44:05    

Elmoricq a écrit :

Euh, smiley petrus75 == phrase foireuse, second degré toussa


 
OUI BIN JE POSTE PENDANT QUE STE CACAMOU DE FLACHE COMPILE ALORS JE SUIS UN PEU SUR LES NERFS QUOI §§§

Reply

Marsh Posté le 05-12-2005 à 16:44:22    

Caedes a écrit :

J'ai déjà écrit que ca ne fonctionnerait pas pour && / &... (bon ok je n'ai pas été très clair dans mon post) ..
 
tu parles de "pour optimiser" : c'est bien le pire : j'avais avant dans mon code des || et le gaillard me les a remplacé par des | ... comme si c'était plus rapide. :??:


Il a fumé, tu le choppes et tu le déboite :o
 
Genre grave, stupidiser du code et diminuer sa lisibilité pour des cacas pareil, ça devrait être faute grave :o


Message édité par masklinn le 05-12-2005 à 16:44:58

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-12-2005 à 16:44:36    

C est quand même un gars d'une boîte renommée qui nous a porté notre driver WDM sous linux 2.6... :-/

Reply

Marsh Posté le 05-12-2005 à 16:45:03    

chrisbk a écrit :

OUI BIN JE POSTE PENDANT QUE STE CACAMOU DE FLACHE COMPILE ALORS JE SUIS UN PEU SUR LES NERFS QUOI §§§


 
Donc pour te calmer tu viens faire du C sur le forum ?  [:pingouino]

Reply

Marsh Posté le 05-12-2005 à 16:45:33    

Un consultant IBM [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-12-2005 à 16:45:35    

Caedes a écrit :

C est quand même un gars d'une boîte renommée qui nous a porté notre driver WDM sous linux 2.6... :-/


 
Tu as un bout de code précis à nous montrer ?  
Il avait peut-être une bonne raison... ou pas.

Reply

Marsh Posté le 05-12-2005 à 16:46:25    

Elmoricq a écrit :

Donc pour te calmer tu viens faire du C sur le forum ?  [:pingouino]


 
[:pingouino] j'ai merdé ma vie

Reply

Marsh Posté le 05-12-2005 à 16:47:35    

Avant (code windows) :
 

Code :
  1. if ((channel->present)
  2. && ((open_channel->reference_clock_source != R27EX0) || !(control->external_line_busy[0]))
  3. && ((open_channel->reference_clock_source != R27EX1) || !(control->external_line_busy[1])) )


 
 
Après :
 

Code :
  1. if ((channel->present)
  2. && ((open_channel->reference_clock_source != R27EX0) | !(control->external_line_busy[0]))
  3. && ((open_channel->reference_clock_source != R27EX1) | !(control->external_line_busy[1])) )

Message cité 1 fois
Message édité par Caedes le 05-12-2005 à 16:50:50
Reply

Marsh Posté le 05-12-2005 à 16:49:03    

Ca ressemble à un block copy-paste raté [:petrus75]
Et y a pas un problème de parenthèses ? :??:

Message cité 1 fois
Message édité par Elmoricq le 05-12-2005 à 16:49:35
Reply

Marsh Posté le 05-12-2005 à 16:49:27    

bah nan je vois pas, je trouve que c'est prendre une certaine liberté

Reply

Marsh Posté le 05-12-2005 à 16:51:21    

Elmoricq a écrit :


Et y a pas un problème de parenthèses ? :??:


Désolé j'ai édité  :sweat:  

Reply

Marsh Posté le 05-12-2005 à 16:53:31    

Caedes a écrit :

Avant (code windows) :
 

Code :
  1. if ((channel->present)
  2. && ((open_channel->reference_clock_source != R27EX0) || !(control->external_line_busy[0]))
  3. && ((open_channel->reference_clock_source != R27EX1) || !(control->external_line_busy[1])) )


 
 
Après :
 

Code :
  1. if ((channel->present)
  2. && ((open_channel->reference_clock_source != R27EX0) | !(control->external_line_busy[0]))
  3. && ((open_channel->reference_clock_source != R27EX1) | !(control->external_line_busy[1])) )



Première version: il n'évalue "control->external_line_busy[0]" et "control->external_line_busy[1]" que si les conditions précédentes sont vraies, 2e version il les évalue à chaque fois :o
 
Là ça a l'air d'être une paire de booléens dans une petite structure donc ça doit pas coûter grand chose (il y a néamoins un coût) donc c'est pas franchement gênant, juste vachement moins logique quand on le lit (les sémantiques de && et || étant "imprimées" en clair dans le cerveau des codeurs, alors que "|" est planqué plus loin, sauf pour les âmes perdus faisant de l'arithmétique booléenne à longueur de journée). Par contre si le 2e membre était une fonction un peu longue à calculer ça ferait bien mal, surtout si le premier paramètre est beaucoup plus souvent évalué à TRUE que l'inverse


Message édité par masklinn le 05-12-2005 à 16:55:59

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-12-2005 à 16:58:11    

ce qui m'inquiète, c'est que ce n'a pas été codé comme cela au début ; il a volontairement changé les || en | ... :/

Reply

Marsh Posté le 05-12-2005 à 16:58:33    

enfin merci à tous :hello:

Reply

Marsh Posté le 05-12-2005 à 17:00:27    

Caedes a écrit :

ce qui m'inquiète, c'est que ce n'a pas été codé comme cela au début ; il a volontairement changé les || en | ... :/


Ben demande lui pourquoi il est con [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-12-2005 à 18:15:08    

Le danger c'est que || est moins prioritaire que &&, alors que | est plus prioritaire que &&. Donc si tu n'avais pas de parentheses inutiles dans le code de depart, tu risques d'avoir une condition fausse en changeant simplement les || par |. Et puis sur le plan conceptuel, || et | ne servent pas a la meme chose.

Reply

Marsh Posté le 06-12-2005 à 03:39:21    

en fait, ça n'a pas grand  chose à voir :
 
(1||2)==3; // faux
(1|2)==3; // vrai
 
vaut mieux voir le ou binaire comme un +

Reply

Marsh Posté le 06-12-2005 à 09:53:13    

fra0 a écrit :

en fait, ça n'a pas grand  chose à voir :
 
(1||2)==3; // faux
(1|2)==3; // vrai
 
vaut mieux voir le ou binaire comme un +


1|5=5
1+5=6  :sarcastic:


Message édité par Sve@r le 06-12-2005 à 10:08:34
Reply

Marsh Posté le 06-12-2005 à 09:55:42    

gnagnagna il voulait dire comme un operateur mathematique

Reply

Marsh Posté le 06-12-2005 à 10:06:28    


 :D  :D  :D  
 

chrisbk a écrit :

il voulait dire comme un operateur mathematique


Exact... autant pour moi  :jap:


Message édité par Sve@r le 06-12-2005 à 10:08:16

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 06-12-2005 à 12:17:36    

fra0 a écrit :

en fait, ça n'a pas grand  chose à voir :
 
(1||2)==3; // faux
(1|2)==3; // vrai
 
vaut mieux voir le ou binaire comme un +


oui, ca tout le monde le sait je pense.
Ce n'était pas la question  ;)

Reply

Marsh Posté le 06-12-2005 à 13:46:07    

Caedes a écrit :

oui, ca tout le monde le sait je pense.
Ce n'était pas la question  ;)


Hum... moi je vois 3 points de discussion

  • peut-on remplacer les "||" par des "|" sans nuire à l'exécution ?

Ben oui de par l'algèbre de Boole
 

  • peut-on remplacer les "||" par des "|" sans nuire tout court

Non. C'est comme si on remplaçait tous les ".c" par des ".i" (résultants du préprocesseur). On obtient un source fonctionnel mais plutôt illisible et inmaintenable. Imagine qu'on veuille ensuite inverser une expression; il faudra passer chaque "|" au peigne fin pour détecter s'il est mathématique ou logique
 

  • est-il plus rapide d'utiliser le "|" plutôt que le "||"

Personnellement je ne crois pas. Etant donné que le "|" est un opérateur mathématique, il sera exécuté intégralement sur tous ses opérandes alors que, dans une expression "prop1 || prop2 || prop3", l'évaluation s'arrête à "prop1" si cette proposition est vraie.

Message cité 1 fois
Message édité par Sve@r le 06-12-2005 à 13:46:24
Reply

Marsh Posté le 06-12-2005 à 13:47:43    

Sve@r a écrit :

Personnellement je ne crois pas. Etant donné que le "|" est un opérateur mathématique, il sera exécuté intégralement sur tous ses opérandes alors que, dans une expression "prop1 || prop2 || prop3", l'évaluation s'arrête à "prop1" si cette proposition est vraie.


Attention, pas en VB :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 06-12-2005 à 13:48:47    

ouais la mais on est en C [:el g]

Reply

Marsh Posté le 06-12-2005 à 13:49:28    

chrisbk a écrit :

ouais la mais on est en C [:el g]


Ouais mais bon je préviens :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed