在 C BNF 中,MultiplicativeExpression定义UnaryOperator如下:
MultiplicativeExpression ::= CastExpression ( ( "*" | "/" | "%" ) MultiplicativeExpression )? UnaryOperator ::= ( "&" | "*" | "+" | "-" | "~" | "!" )
/和%定义MultiplicativeExpression在?
在 C BNF 中,MultiplicativeExpression定义UnaryOperator如下:
MultiplicativeExpression ::= CastExpression ( ( "*" | "/" | "%" ) MultiplicativeExpression )? UnaryOperator ::= ( "&" | "*" | "+" | "-" | "~" | "!" )
/和%定义MultiplicativeExpression在?
根据维基百科
一元运算是只有一个操作数的运算。
因此,只需要或只处理一个操作数的运算符是一元运算符。
%并且/肯定需要两个操作数,所以它们不是一元运算符。
如果您想知道 and 的存在+,-它们是一元正负运算符(一元算术运算符),而不是加法和减法。
引用C11,第 6.5.3.3 章
一元运算符的结果
+是其(提升的)操作数的值。整数提升在操作数上执行,结果具有提升的类型。
和
一元运算符的结果
-是其(提升的)操作数的负数。整数提升在操作数上执行,结果具有提升的类型。
一些字符用于多个运算符。*用于乘法运算符(二元运算符)和地址间接运算符(一元运算符)。因此,你可以有一个像
x = a * *p; // multiply a by what p points to
%并且/在一元表达式中没有类似的用途,这就是为什么它们不出现在一元运算符列表中的原因。
&是另一个可用作一元运算符(address-of)或二元运算符(按位and)的字符。
/并且%永远不会存在于只接受一个操作数的上下文中,因此它们永远不是一元运算符。至于给出的其他运算符:
&可以表示地址(以及按位与)*可以表示指针取消引用(以及乘法)。+并且-可以是一元加/减。!和~是逻辑否定和按位补码。