2011-01-11 5 views
3

J'écris un petit analyseur, qui aura un opérateur OU et un opérateur ET. Quand vous voyez une série de RUP et d'OR, à quoi pensez-vous que ce sera plus contraignant? Étant donné l'expression a & b | c, vous attendez-vous à ce que cela signifie (a&b)|c ou a&(b|c)? Pouvez-vous donner une raison de préférer l'un à l'autre?OU logique vs logique ET: qui devrait être plus contraignant?

+0

J'utilise entre parenthèses et/ou espacement pour le rendre explicite. –

Répondre

3

Faites ce que tout le monde fait; ET se lie plus étroitement que OR (voir par exemple C Operator Precedence Table). C'est la convention que tout le monde attend, alors adoptez le principle of least surprise.

Ce choix n'est pas arbitraire. Il découle du fait que ET et OU suivent une relation similaire à multiplier et ajouter, respectivement; voir par exemple http://en.wikipedia.org/wiki/Boolean_logic#Other_notations.

Notez également que les utilisateurs de votre langue devraient être fortement encouragés à utiliser des parenthèses pour rendre leurs intentions claires aux lecteurs de leur code. Mais c'est à eux de décider!

0

Si vous considérez cela comme des mathématiques discrètes, je dirais que PEMDAS vous amène à dire que l'AND est plus contraignant. Ce n'est pas toujours le cas.

Je vous recommande de recommander à vos utilisateurs d'utiliser des parenthèses en cas d'ambiguïté.

0

Habituellement & a une priorité sur | dans de nombreux scénarios. Mais vous pouvez restreindre les expressions à une forme de parenthèse complète.

2

AND et OR dans l'algèbre de Boole sont équivalentes à * et - en algèbre régulière, donc il est logique que et se fixe plus difficile que ou simple * se fixe plus dur que +:

A B A*B A&B A+B A|B 
0 0 0 0 0  0 
0 1 0 0 1  1 
1 0 0 0 1  1 
1 1 1 1 1(>0) 1