在 C BNF 中,UnaryOperator ::= ( "&" | "*" | "+" | "-" | "~" | "!" )。为什么 / 和 % 在 UnaryOperator 中被排除?
In C BNF, UnaryOperator ::= ( "&" | "*" | "+" | "-" | "~" | "!" ). Why / and % are excluded in UnaryOperator?
在C BNF中,MultiplicativeExpression
和UnaryOperator
定义如下:
MultiplicativeExpression ::= CastExpression ( ( "*" | "/" | "%" ) MultiplicativeExpression )?
UnaryOperator ::= ( "&" | "*" | "+" | "-" | "~" | "!" )
/
和 %
是否在 MultiplicativeExpression
中定义?
a unary operation is an operation with only one operand..
因此,只需要或只对一个操作数起作用的运算符是一元运算符。
%
和 /
肯定需要两个操作数,所以它们不是一元运算符。
如果您想知道 +
和 -
的存在,它们是一元正负运算符(一元算术运算符) ,不是加减法。
引用 C11
,章节 §6.5.3.3
The result of the unary +
operator is the value of its (promoted) operand. The integer
promotions are performed on the operand, and the result has the promoted type.
和
The result of the unary -
operator is the negative of its (promoted) operand. The integer
promotions are performed on the operand, and the result has the promoted type.
/
和 %
永远不会存在于只接受一个操作数的上下文中,因此它们永远不会是 一元运算符 。
至于给出的其他运算符:
&
可以表示地址(以及按位与)
*
可以表示指针取消引用(以及乘法)。
+
和-
可以是一元加/减。
!
和~
是逻辑非和位补。
一些字符用于多个运算符。 *
用于乘法运算符(二元运算符)和地址间接运算符(一元运算符)。因此,您可以使用
这样的表达式
x = a * *p; // multiply a by what p points to
%
和 /
在一元表达式中没有相似的用法,这就是它们没有出现在一元运算符列表中的原因。
&
是另一个可用作一元运算符(寻址)或二元运算符(按位 and
)的字符。
在C BNF中,MultiplicativeExpression
和UnaryOperator
定义如下:
MultiplicativeExpression ::= CastExpression ( ( "*" | "/" | "%" ) MultiplicativeExpression )? UnaryOperator ::= ( "&" | "*" | "+" | "-" | "~" | "!" )
/
和 %
是否在 MultiplicativeExpression
中定义?
a unary operation is an operation with only one operand..
因此,只需要或只对一个操作数起作用的运算符是一元运算符。
%
和 /
肯定需要两个操作数,所以它们不是一元运算符。
如果您想知道 +
和 -
的存在,它们是一元正负运算符(一元算术运算符) ,不是加减法。
引用 C11
,章节 §6.5.3.3
The result of the unary
+
operator is the value of its (promoted) operand. The integer promotions are performed on the operand, and the result has the promoted type.
和
The result of the unary
-
operator is the negative of its (promoted) operand. The integer promotions are performed on the operand, and the result has the promoted type.
/
和 %
永远不会存在于只接受一个操作数的上下文中,因此它们永远不会是 一元运算符 。
至于给出的其他运算符:
&
可以表示地址(以及按位与)*
可以表示指针取消引用(以及乘法)。+
和-
可以是一元加/减。!
和~
是逻辑非和位补。
一些字符用于多个运算符。 *
用于乘法运算符(二元运算符)和地址间接运算符(一元运算符)。因此,您可以使用
x = a * *p; // multiply a by what p points to
%
和 /
在一元表达式中没有相似的用法,这就是它们没有出现在一元运算符列表中的原因。
&
是另一个可用作一元运算符(寻址)或二元运算符(按位 and
)的字符。