Приоритет логических операторов с NAND, NOR, XNOR - PullRequest
7 голосов
/ 17 ноября 2011

Я искал в Интернете, но не нашел решения этой проблемы.

Каков логический приоритет для операторов NAND, NOR и XNOR?

Я имею в виду, рассматривая в качестве примера выражение

A AND B NAND C

какой оператор должен быть оценен первым?
Очевидно, что NAND можно перевести как NOT-AND (как NOR означает NOT-OR и XNOR означает NOT-XOR), но

(A AND B) NAND C != A AND (B NAND C) = A AND NOT(B AND C)

Согласно моим исследованиям, для такого выражения нет определенного приоритета, поэтому я думаю, что самое простое решение - оценить операторы в порядке их появления в выражении, но я могу ошибаться.

Есть предложения?

Ответы [ 5 ]

3 голосов
/ 17 ноября 2011

Это на самом деле зависит от ваших правил приоритета .Если нет порядка (нет правил приоритета или всего того же важного), его следует решать слева направо. Здесь - пример с C ++.

1 голос
/ 17 ноября 2011
Приоритет оператора

должен определяться языком, и то, что у вас здесь есть, не кажется формальным языком, в таких случаях его часто предполагают оценивать, когда вы читаете слева направо.

Тем не менее, вы можете использовать тот же приоритет операторов, что и verilog , или посмотреть wikipedia , который имеет небольшой приоритет таблицы, обычно используемый для логических операторов

1 голос
/ 17 ноября 2011

Если выражение написано так, как оно указано в вопросе (без скобок между ними), оно должно решаться в том порядке, в котором оно написано. Это единственный правильный способ сделать это. например. Если его записанная строка A NOR B XOR C, это просто означает (A NOR B) XOR C

0 голосов
/ 17 ноября 2011

Булевы операторы имеют аналоги в обычной арифметике, поэтому один из способов определить, какими должны быть правила приоритета, - это следовать правилам обычной арифметики, например, AND аналогично умножению, а OR аналогично сложению, следовательно, AND должно иметь более высокий приоритет, чем OR. Если вы посмотрите на таблицу приоритетов операторов для таких языков, как C или C ++, то увидите, что это действительно так в этих и других родственных языках.

0 голосов
/ 17 ноября 2011

Полагаю, это может зависеть от языка, ВСЕ операторы должны иметь порядок приоритета, определенный или подразумеваемый конкретной имплементацией.

Здесь - это то, что другой сайт должен сказать по этому поводу.

...