Sont || et ! les opérateurs suffisante pour faire de chaque expression logique?

L'expression logique ( a && b ) (les deux a et b ont des valeurs booléennes) peut être écrit comme !(!a || !b), par exemple. N'est-ce pas dire que && est "inutile"? Est-ce à dire que tous expressions logiques peuvent être effectuées uniquement à l'aide de || et !?

  • C'est plus une base de la logique symbolique question que Java problème, mais oui. OU et PAS en combinaison, peuvent être utilisés pour construire tout le reste. Le même avec ET et PAS. Par exemple, quand j'étais à l'école on nous a appris à construire tout en utilisant uniquement des portes NAND parce qu'ils ont pris moins de transistors.
  • Ne confondez pas la capacité d'écrire une déclaration de cette façon, avec l'opportunité de le faire. Sucre syntaxique est un bon chose.
  • Voir aussi "Comment faire de la logique OU de la avec la,ET la PAS?" stackoverflow.com/questions/8374895/...
  • XOR est le même que ^
  • De nombreux porte logique jetons seulement fournir NAND ou NOR portes comme il est possible de mettre en œuvre toutes les opérations avec eux et il les rend pas chers à produire - A and B == !A nor !B == !(!A or !B). De même A or B == !A nand !B == !(!A and !B). Évidemment passer la même valeur aux deux entrées d'un NAND ou NOR donnera le même résultat qu'un simple PAS. XOR et XNOR sont également possible, mais plus complexe. Voir le théorème De De Morgan
  • Oui, à l'aide ! et || opérateurs est encore plus d'options que NI le fait que NI portes sont suffisamment signifie que vous pouvez construire toute logique exclusivement avec des expressions de la forme !(A || B).
  • vous pouvez construire un ordinateur de travail et de RAM juste à l'aide de la NAND. cela signifie également que vous pouvez construire stackoverflow site avec seulement NAND gate 🙂
  • N'est-ce pas un ordinateur à la question scientifique? Je ne vois pas de code ici. En particulier, si cela est vrai dans la pratique varie par la mise en œuvre, par exemple en C++ avec l'exploitation d'une surcharge, il n'est pas en général.
  • En fait, vous avez seulement besoin d'une expression logique pour exprimer tous les opérateurs logiques: La Sheffer accident vasculaire cérébral, ou "pas de deux": en.wikipedia.org/wiki/Sheffer_stroke
  • Les gens de voir cette question comme ceci TED talk. C'est à propos de la construction d'un ordinateur en utilisant uniquement des portes NAND.
  • S'il vous plaît ne pas aller à l'écriture de code en utilisant rien mais || et ! - il sera très illisible et futurs développeurs ne peuvent pas facilement saisir le code de l'intention. Pour ne pas mentionner le compilateur et/ou matériel en fin de compte faire ce qu'il croit est le meilleur, c'est à dire. les modules matériels déjà seulement ont des portes NAND et tout votre code sera jeté à travers elle, donc pas besoin d'essayer d'utiliser uniquement de la NAND (ou non) dans votre code.
  • Je ne pense pas que quiconque ici préconise de faire une telle chose. Je crois que cette question a été plus théorique de la logique de la question, que une programmation on, vraiment.
  • Aussi pertinentes Un Jeu d'Instructions Ccomputer. Dans l'habitude de la mise en œuvre de l'instruction est "soustraire de la branche si negativel", mais il n'est pas abrégé sbn car il n'y a pas besoin de l'écrire. Le code d'assemblée se compose de l'ordre de triplets.
  • Vous pouvez créer toutes les expressions logiques à l'aide "ou" || et "non" ! les opérateurs, mais cela ne signifie pas que vous devriez. L'introduction de "pas" l'opérateur d'habitude rend le code plus compliqué à lire, qui peut être source d'erreurs et de malentendus. Vous devriez éviter de "pas" l'opérateur quand vous le pouvez. Vous pouvez même remplacer le || avec + (plus) et && avec * (multiplication), de sorte que vous pouvez sauter plus d'opérateurs logiques! L'Addition et la multiplication sont identiques avec "ou" et "et" pour des primitifs les types de données booléennes. Vous pouvez faire ce genre de choses, mais voulez-vous vraiment faire de votre code moins lisible et plus difficile à maintenir?
  • Avez-vous des liens ou des références à des pratiques exemplaires en précisant que vous devriez éviter de l'opérateur not? Je pense que c'est tout à fait circonstancielle lorsque le pas de l'opérateur rend le code plus ou moins lisible. Alors que je suis d'accord que vous devriez généralement le minimum des opérateurs, tout en rendant le code lisible, je ne pense pas que vous devriez éviter en général un opérateur spécifique. Et, à ma connaissance, vous ne pouvez pas remplacer le || avec plus ou && avec la star.
  • Vous avez raison. Je n'ai pas de référence à la pratique d'éviter de l'opérateur, mais à mon avis, si vous pouvez utiliser moins le montant des opérateurs, vous devez le faire, comme vous l'avez dit. En général, vous ne devriez pas remplacer le || avec l'addition et la && avec la star, mais quand vous avez deux valeurs booléennes, vous pouvez le faire dans l'instruction conditionnelle et il va fonctionner. Peut-être qu'il ne fonctionne pas dans toutes les langues, mais en C++, il fonctionne.

InformationsquelleAutor JakeTheSnake | 2015-10-15