-4

C BNF では、MultiplicativeExpressionUnaryOperatorは次のように定義されます。

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

/および で%定義されていMultiplicativeExpressionますか?

4

3 に答える 3

2

ウィキペディアによると

単項演算は、オペランドが1 つだけの演算です。

したがって、1 つのオペランドのみを必要とする、または作用する演算子は、単項演算子です。

%/間違いなく 2 つのオペランドが必要なので、それらは単項演算子ではありません。

+andの存在について疑問に思っている場合-、それらは単項の正と負の演算子 (単項算術演算子) であり、加算と減算ではありません。

引用C11、章§6.5.3.3

単項演算子の結果は、+その (プロモートされた) オペランドの値です。オペランドに対して整数昇格が実行され、結果は昇格された型になります。

単項演算子の結果は、-その (昇格された) オペランドの負の数です。オペランドに対して整数昇格が実行され、結果は昇格された型になります。

于 2016-05-05T08:35:18.483 に答える
1

一部の文字は、複数の演算子に使用されます。*乗算演算子 (2 項演算子) とアドレス間接演算子 (単項演算子) の両方に使用されます。したがって、次のような表現を使用できます。

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

%単項式で/は同様の用途がないため、単項演算子のリストに表示されません。

&単項演算子 (address-of) または二項演算子 (bitwise ) として使用できる別の文字ですand

于 2016-05-05T11:48:33.863 に答える
0

/オペランドを 1 つだけ取るコンテキストには存在し%ないため、単項演算子にはなりません。与えられた他の演算子については:

  1. &address-of (およびビットごとの AND) を意味することができます
  2. *ポインターの逆参照 (および乗算) を意味する場合があります。
  3. +-単項プラス/マイナスにすることができます。
  4. !および~は、論理否定およびビットごとの補数です。
于 2016-05-05T08:36:07.857 に答える