Utilité du || - C - Programmation
Marsh Posté le 05-12-2005 à 16:32:55
hein ?
| = ou logique sur des bits
|| = verification de condition
rien a voir with teh choucroute
Marsh Posté le 05-12-2005 à 16:33:13
ReplyMarsh Posté le 05-12-2005 à 16:35:10
__
|| = 3,14...
__
|| = poutre en I
¯¯
Marsh Posté le 05-12-2005 à 16:36:39
ah ce n'était pas un jeu où il faut chaque fois rajouter une barre
Marsh Posté le 05-12-2005 à 16:37:30
Caedes a écrit : Bonjour ! |
Je doute fort qu'utiliser "|" permette de faire du short-circuiting
Marsh Posté le 05-12-2005 à 16:37:54
chrisbk a écrit : hein ? |
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 |" ?
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
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... |
DANS TOUS §§§
SHORT-CIRCUITING §§§
Marsh Posté le 05-12-2005 à 16:40:49
Elmoricq a écrit : Ben pour optimiser, voyons |
t'optimise rien, (cf post de masklinn) et tu risques les emmerdes si t'es un adepte de la fenantise, genre
Code :
|
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
|
Je pense qu'il était ironique
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)
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
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.
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
Marsh Posté le 05-12-2005 à 16:43:30
Caedes a écrit : |
c'est une andouille le gus
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 §§§
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) .. |
Il a fumé, tu le choppes et tu le déboite
Genre grave, stupidiser du code et diminuer sa lisibilité pour des cacas pareil, ça devrait être faute grave
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... :-/
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 ?
Marsh Posté le 05-12-2005 à 16:45:33
Un consultant IBM
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.
Marsh Posté le 05-12-2005 à 16:46:25
ReplyMarsh Posté le 05-12-2005 à 16:47:35
Avant (code windows) :
Code :
|
Après :
Code :
|
Marsh Posté le 05-12-2005 à 16:49:03
Ca ressemble à un block copy-paste raté
Et y a pas un problème de parenthèses ?
Marsh Posté le 05-12-2005 à 16:49:27
bah nan je vois pas, je trouve que c'est prendre une certaine liberté
Marsh Posté le 05-12-2005 à 16:51:21
ReplyMarsh Posté le 05-12-2005 à 16:53:31
Caedes a écrit : Avant (code windows) :
|
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
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
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 | ...
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
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.
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 +
Marsh Posté le 06-12-2005 à 09:53:13
fra0 a écrit : en fait, ça n'a pas grand chose à voir : |
1|5=5
1+5=6
Marsh Posté le 06-12-2005 à 09:55:42
ReplyMarsh Posté le 06-12-2005 à 10:06:28
chrisbk a écrit : gnagnagna |
chrisbk a écrit : il voulait dire comme un operateur mathematique |
Exact... autant pour moi
Marsh Posté le 06-12-2005 à 12:17:36
fra0 a écrit : en fait, ça n'a pas grand chose à voir : |
oui, ca tout le monde le sait je pense.
Ce n'était pas la question
Marsh Posté le 06-12-2005 à 13:46:07
Caedes a écrit : oui, ca tout le monde le sait je pense. |
Hum... moi je vois 3 points de discussion
Ben oui de par l'algèbre de Boole
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
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.
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
Marsh Posté le 06-12-2005 à 13:49:28
chrisbk a écrit : ouais la mais on est en C |
Ouais mais bon je préviens
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