2016-05-05 19 views
-4

在C BNF,MultiplicativeExpressionUnaryOperator定義如下所示:在C BNF中,UnaryOperator :: =(「&」|「」「」「+」|「 - 」|「〜」|「!」)。爲什麼/和%在UnaryOperator中排除?

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

/%MultiplicativeExpression界定?

+0

什麼是C BNF? C標準? –

+0

@SouravGhosh,即C的Backus-Naur窗體。 – aheh

回答

2

根據wikipedia

一元操作與只有一個操作數的運算..

所以,這就需要或適用於只有一個操作數的運營商,是一元運算符。

%/肯定需要兩個操作數,所以它們不是一元運算符。

在情況下,你想知道的+-存在,他們是一元的正面和負面的運營商(目算術運算符),不是加法和減法。

引用C11,章§6.5.3.3

一元+操作的結果是它的(推動)操作數的值。在操作數上執行整數 升級,並且結果具有升級類型。

一元-操作的結果是它的(推動)操作數的負值。在操作數上執行整數 升級,並且結果具有升級類型。

+0

是否有+代表加上哪一個加上b? – aheh

+1

一元+和二元+是不同的運算符 –

0

/%在舉一個操作環境中不會存在等於是他們從來元運算符。 至於給出的其他運營商:

  1. &可以意味着地址的(以及按位AND)
  2. *可以意味着指針引用(以及倍增)。
  3. +-可以是一元加/減。
  4. !~是邏輯否定和按位補碼。
1

某些字符用於多個操作員。 *用於乘法運算符(它是二元運算符)和地址間接運算符(它是一元運算符)。因此,你可以有一個像

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

%/表達沒有在一元表達式類似用途的,這就是爲什麼他們沒有在一元運算符的列表中。

&是可以用作一元運算符(地址)或二元運算符(按位and)的另一個字符。

相關問題