2016-05-05 1 views
-4

В C BNF, MultiplicativeExpression и UnaryOperator определяются как следующие:В C BNF, UnaryOperator :: = ("&" | "*" | "+" | "-" | "~" | "!"). Почему/и% исключены в UnaryOperator?

MultiplicativeExpression ::= CastExpression (("*" | "/" | "%") MultiplicativeExpression)? 
UnaryOperator ::= ("&" | "*" | "+" | "-" | "~" | "!") 

ли / и %, определенный в MultiplicativeExpression?

+0

Что такое C BNF? C стандарт? –

+0

@SouravGhosh, это форма Бэкуса-Наура C. – aheh

ответ

2

Согласно wikipedia

одноместной операции является операцией с только один операнд ..

Таким образом, операторы, необходим или работает на только один операнд, являются унарные операторы.

% и / определенно нуждаются в двух операндах, поэтому они не являются унарными операторами.

В случае, если Вы задаетесь вопросом о присутствии + и -, они одинарные положительные и отрицательные операторы (унарные арифметические операторы), а не сложение и вычитание.

Цитирование C11, глава §6.5.3.3

В результате одноместной + оператора является значение его (операнда) способствовало. Целое число рекламных акций выполняется в операнде, и результат имеет продвинутый тип.

и

В результате одноместной - оператора является отрицательным (его) способствовало операнда. Целое число рекламных акций выполняется в операнде, и результат имеет продвинутый тип.

+0

Есть ли + плюс плюс, который плюс b? – aheh

+1

унарные + и двоичные + - разные операторы –

0

/ и % никогда не существуют в контекстах, которые имеют только один операнд так поэтому они никогда не унарные. Что касается других операторов, заданных:

  1. & может означать адрес-(а также побитовое И)
  2. * может означать указатель разыменования (равно как и умножение).
  3. + и - может быть унарный плюс/минус.
  4. ! и ~ - логическое отрицание и побитовое дополнение.
1

Некоторые символы используются для нескольких операторов. * используется как для оператора умножения (который является двоичным оператором), так и оператора адресного указателя (который является унарным оператором).Таким образом, вы можете иметь выражение как

x = a * *p; // multiply a by what p points to 

% и / не имеет схожее использование в одинарных выражениях, поэтому они не отображаются в списке унарных.

& - это еще один символ, который может использоваться как унарный оператор (адрес) или двоичный оператор (побитовый and).

Смежные вопросы