在C BNF中,MultiplicativeExpression
和UnaryOperator
的定义如下:
MultiplicativeExpression ::= CastExpression ( ( "*" | "/" | "%" ) MultiplicativeExpression )? UnaryOperator ::= ( "&" | "*" | "+" | "-" | "~" | "!" )
/
中是否定义了%
和MultiplicativeExpression
?
答案 0 :(得分:2)
一元操作是只有一个操作数的操作..
因此,仅需要或仅处理一个操作数的运算符是一元运算符。
%
和/
肯定需要两个操作数,因此它们不是一元运算符。
如果您想知道+
和-
的存在,它们是一元正负算子(一元算术运算符),而不是加法和减法
引用C11
,章节§6.5.3.3
一元
+
运算符的结果是其(提升的)操作数的值。整数 在操作数上执行促销,结果具有提升类型。
和
一元
-
运算符的结果是其(提升的)操作数的否定。整数 在操作数上执行促销,结果具有提升类型。
答案 1 :(得分:1)
某些字符用于多个运算符。 *
用于乘法运算符(它是二元运算符)和地址间接运算符(它是一元运算符)。因此,您可以使用类似
x = a * *p; // multiply a by what p points to
%
和/
在一元表达式中没有相似的用法,这就是为什么它们没有出现在一元运算符列表中。
&
是另一个可以用作一元运算符(address-of)或二元运算符(按位and
)的字符。
答案 2 :(得分:0)
/
和%
在仅占用一个操作数的上下文中从不存在,因此它们永远不会是一元运算符。
至于给出的其他运营商:
&
可以表示地址(以及按位AND)*
可以表示指针取消引用(以及乘法)。+
和-
可以是一元加/减。!
和~
是逻辑否定和按位补码。