DIFFÉRENCE ENTRE + (ARITHMÉTIQUE) ET OR (BITWISE)

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 15 août 2006 à 11:33
clubpsr Messages postés 21 Date d'inscription samedi 15 février 2003 Statut Membre Dernière intervention 2 septembre 2008 - 21 août 2006 à 10:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39133-difference-entre-arithmetique-et-or-bitwise

clubpsr Messages postés 21 Date d'inscription samedi 15 février 2003 Statut Membre Dernière intervention 2 septembre 2008
21 août 2006 à 10:20
Il est aussi intéressant de constater que :

- Le "et" en littérature est en fait un "ou" en logique,
Fromage et dessert (les deux)

- Et que le "ou" en littérature est en fait un "ou exclusif" en logique !!!
Fromage ou dessert (mais pas les deux)

C'est pour ça que certain croit que la logique c'est compliquée, en fait c'est le français qui n'est pas logique :-) (C.F. L'exeption confirme la rêgle)
cs_Kelpan Messages postés 70 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 17 septembre 2006
21 août 2006 à 01:53
Si je peux me permettre, une manière plus simple de démontrer le problème du '+'

Public Enum Test
var1 = 1
var2 = 2
var4 = 4
var1et2 = var1 Or var2
End Enum

Sub Test()
Debug.Print (var1 Or var1et2) ' 3> var1 et var2 => Correct
Debug.Print (var1 + var1et2) ' 4> var4 => Incorrect
End Sub
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
18 août 2006 à 09:26
Ecoute Jean_Marc_N2 c'est pas sorcier, l'intérêt que j'ai trouvé à ta source était de relever la nuance ce qui aidera surement nombreux mais y'a beaucoup a qui tu n'apprends rien sur l'utilisation ou pas du "+".

Le terme "accident" que tu utilises est très mal placé et même déroutant il s'agit d'une simple logique mathématique facilement démontrable, c'est pas la peine d'en faire un grand discours.

Bonne Prog
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
18 août 2006 à 01:10
ton exemple tu sommes 2 puissances de 2, c'est le seul cas
jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009
17 août 2006 à 21:23
je voulais dire 2+4, pas 2+6 bien sur.
jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009
17 août 2006 à 21:22
Hello,
merci pour ton commentaire mais je pense alors que j'ai mal expliqué le but de cette source :-((

Le but était de faire comprendre qu'il ne faut **JAMAIS** utiliser le signe "+" pour effectuer une opération binaire, car le "+" ne fait **PAS** une opération bit à bit. L'idée était de montrer qu'il faut **TOUJOURS** utiliser le OR, tout simplement parce qu'il est fait pour ça, contrairement au "+" qui n'est QUE une addition arithmétique.

Le fait que le résultat d'un OR et d'un "+" entre 2 valeurs soit parfois identique n'est qu'anecdotique! Il n'y a *aucune* raison (bonne ou mauvaise) pour utiliser le signe "+" pour faire des opérations bit à bit, ça ne marche tout simplement PAS. Le fait que 2 OR 4 soit "égal" à 2 + 6 n'est qu'un accident, ces 2 nombres ayant des représentations en binaire ou les "1" ne se "supperposent" pas, mais c'est tout...

Sniff, je croyais que le but d'avoir mis cette source ici était limpide...
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
17 août 2006 à 09:52
Ce qu'on devrait comprendre ici est qu'il est préférable d'utiliser le "OR" pour les combinaisons des valeurs d'énumérations par exemple plutôt que le "+".

L'utilisation du "+" est délicate sauf pour des utilisateurs avertis (connaissance élémentaire sur les bases en arithmétique) et n'a pour seul intérêt qu'une lecture aisé du code.
jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009
15 août 2006 à 22:03
brunews: je le sais, bien évidemment! Il se trouve comme le signale justement renfield que tous ne le savent pas, par exemple ceux qui "additionnent" les flags avec un "+" au lieu d'un OR; Quand à faire étudier l'algèbre de Boole, je pense que si on faisait un sondage sur ce forum en demandant à tous 1) ce qu'est l'algèbre de Boole, 2) de faire les tables de vérité de OR, AND et XOR, on serait assez surpris, amha...

Alain: exact, aucun intérêt si ce n'est de fournir une vue didactique de la chose via la représentation binaire.

Cacophrène: Oui VB est sans doute trop permissif, ce qui n'est pas une raison pour en profiter :-)

Merci à tous pour vos commentaires :-)
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
15 août 2006 à 19:45
Salut !

Dès que a et b sont des puissances de 2 distinctes, on a a Or b a + b. Si a b alors ce n'est déjà plus toujours vrai (ex. a = b = 4). Si a et b ne sont pas des puissances de 2 (et sont tous deux non nuls), c'est toujours faux.

Malheureusement le seul cas où c'est toujours vrai... ben c'est celui dans lequel on se trouve lorsqu'on manipule les constantes des MsgBox, des attributs de fichiers, etc... :-(

Sauf erreur c'est seulement avec les APIs, quand on sort de ce cadre, que les problèmes font surface (et généralement on a déjà pris des habitudes à ce moment-là).

Conclusion bébête du jour : VB est trop permissif.

Cordialement,
Cacophrène
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 août 2006 à 14:37
Aucun rapport entre '+' et 'Or', c'est vrai, et c'est bien là que le bât blesse...

Beaucoup utilisent en effet '+' a tord et a travers, pour concaténer des String, ou combiner des Flags.
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
15 août 2006 à 12:23
étant donné qu'il y a un cas où or et + ont le même "résultat", certaines personnes peuvent confondre, mais bon sinon comme tu dis, interet 0/20, faut que les gens essaient de comprendre certaines choses par eux mêmes...
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 août 2006 à 11:33
Ne le prends pas mal mais 'or' et '+' n'ayant aucun rapport, je ne vois pas trop l'intérêt de cette source.
Sur ce modèle tu pourrais en faire des milliers, il suffit d'indiquer aux gens d'aller étudier l'algèbre de Boole.