-4

在 C BNF 中,MultiplicativeExpression定义UnaryOperator如下:

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

/%定义MultiplicativeExpression在?

4

3 回答 3

2

根据维基百科

一元运算是只有一个操作数的运算。

因此,只需要或只处理一个操作数的运算符是一元运算符。

%并且/肯定需要两个操作数,所以它们不是一元运算符。

如果您想知道 and 的存在+-它们是一元正负运算符(一元算术运算符),而不是加法和减法。

引用C11,第 6.5.3.3 章

一元运算符的结果+是其(提升的)操作数的值。整数提升在操作数上执行,结果具有提升的类型。

一元运算符的结果-是其(提升的)操作数的负数。整数提升在操作数上执行,结果具有提升的类型。

于 2016-05-05T08:35:18.483 回答
1

一些字符用于多个运算符。*用于乘法运算符(二元运算符)和地址间接运算符(一元运算符)。因此,你可以有一个像

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

%并且/在一元表达式中没有类似的用途,这就是为什么它们不出现在一元运算符列表中的原因。

&是另一个可用作一元运算符(address-of)或二元运算符(按位and)的字符。

于 2016-05-05T11:48:33.863 回答
0

/并且%永远不会存在于只接受一个操作数的上下文中,因此它们永远不是一元运算符。至于给出的其他运算符:

  1. &可以表示地址(以及按位与)
  2. *可以表示指针取消引用(以及乘法)。
  3. +并且-可以是一元加/减。
  4. !~是逻辑否定和按位补码。
于 2016-05-05T08:36:07.857 回答