在C-BNF中,一元运算符::=(“x2B”-“x2B”~“x2B”!)。为什么在UnaryOperator中排除/和%?

在C-BNF中,一元运算符::=(“x2B”-“x2B”~“x2B”!)。为什么在UnaryOperator中排除/和%?,c,bnf,unary-operator,binary-operators,C,Bnf,Unary Operator,Binary Operators,在cbnf中,乘法表达式和一元运算符的定义如下: /和%是否在乘法表达式中定义?根据 一元运算是只有一个操作数的运算 因此,只需要一个操作数或只对一个操作数起作用的运算符是一元运算符 %和/肯定需要两个操作数,所以它们不是一元运算符 如果您想知道+和-的存在,它们是一元正运算符和负运算符(一元算术运算符),而不是加法和减法 引用第§6.5.3.3章中的C11 一元+运算符的结果是其(提升的)操作数的值。整数 对操作数执行升级,结果具有升级类型 及 一元-运算符的结果是其(提升的)操作数的负数。整

在cbnf中,
乘法表达式
一元运算符
的定义如下:

/
%
是否在
乘法表达式中定义?

根据

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

因此,只需要一个操作数或只对一个操作数起作用的运算符是一元运算符

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

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

引用第§6.5.3.3章中的
C11

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

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


/
%
在只使用一个操作数的上下文中不存在,因此它们永远不是一元运算符。 至于其他经营者:

  • &
    可以表示的地址(以及按位和)
  • *
    可以表示指针解引用(以及乘法)
  • +
    -
    可以是一元加/减
  • ~
    是逻辑求反和位补

  • 某些字符用于多个运算符
    *
    用于乘法运算符(二进制运算符)和地址间接运算符(一元运算符)。因此,您可以使用如下表达式

    x = a * *p; // multiply a by what p points to
    
    %
    /
    在一元表达式中没有类似的用法,这就是它们不出现在一元运算符列表中的原因


    &
    是另一个字符,可以用作一元运算符(的地址)或二进制运算符(按位

    什么是C BNF?C标准?@SouravGhosh,这是C的Backus-Naur形式。有+表示a+b的加号吗?一元+和二元+是不同的运算符
    x = a * *p; // multiply a by what p points to