中運算子優先順序 C C 語言4 表示式與運算子

2021-10-14 22:18:58 字數 3060 閱讀 9643

表示式是由運算子(包括括號)、運算元(常量、變數、函式等,是乙個操作符操作於其上的數)按照一定的規則組成的式子;可以將常量、變數和函式認為是最簡單的表示式。表示式可以巢狀,每個表示式都有乙個值。在計算時要考慮運算子的優先順序、結合性及資料型別的轉換;計算機中的表示式都寫在一行中。表示式有算術、賦值、關係、邏輯、條件和逗號等。在表示式的後邊加個分號就是表示式語句。除了控制語句外,幾乎都是表示式語句。如:

算術表示式:用於算術計算;

賦值表示式:右值賦值給左值;

關係表示式:表達一些比較簡單的關係;

邏輯表示式:表達一些比較複雜的關係,一般使用邏輯運算子來連線關係表示式;

條件表示式:"?:"表示式,if else語句的簡單表達。

常見操作符及使用:

c語言的資料型別是指對資料按某種規則所進行的分類。運算子是說明特定操作的符號,是構造表示式的工具。

要理解由多個操作符組成的表示式,必須先理解操作符的優先順序、結合性,理解運算元的求值順序。

運算子的結合性與優先順序:如自增自減、賦值運算子,是從右到左;算術運算子、關係運算子,是從左到右。

結合性規定了具有相同優先順序的操作符如何分組。我們已經遇到過涉及結合性的例子。其中之一使用了賦值操作的右結合性,這個特性允許將多個賦值操作串接起來:

該表示式首先將 lval 賦給 kval ,然後將 kval 的值賦給 jval ,最後將 jval 的值再賦給 ival。

另一方面,算術操作符為左結合。表示式

ival * jval / kval * lval // left associative

(((ival * jval) / kval) * lval) // equivalent, parenthesized version

先對 ival 和 jval 做乘法操作,然後乘積除以 kval,最後再將其商與 lval 相乘。

一元操作符和含等號=(賦值操作)的運算子大都是右結合操作符,除此以外,都是左結合(從左至右)。2 邏輯表示式的短路求值

int i=6;

int j=1;

if(i>0 || (j++)>0)

j+=5;

j++的計算會被忽略,對於||,如果左邊的條件表示式為真,右邊的條件表示式不管是真還是假,整個表示式都是真,這也就是短路求值,只有在左邊條件表示式不確定整個邏輯表示式的結果時,才會計算右邊的條件表示式,這在一定程度上增加了效率,但也可能帶來了一些無法預料的錯誤。當用||連線兩個條件表示式時,適合將可能性小的表示式放在左邊先計算。

if(i<0 && (j++)>0)

j+=5;

j++的計算會被忽略,對於&&,如果乙個為假,其他不管是真還是假,整個表示式是假,適合將可能性大的表示式放在左邊先計算;

整型與整型數運算,結果為整型,如 5 / 2 = 2 

整型與浮點數運算,結果為浮點數,如5 / 2.0 = 2.5

字元與整型數運算,結果為整型。

字元與浮點數運算,結果為浮點數。

浮點數與浮點數運算,結果為浮點數。

使用關係運算子不能夠清晰地描述更為複雜的邏輯關係,因為乙個複雜的邏輯通常會包含多個小的邏輯關係。

如果我們的邏輯更為複雜,有多個邏輯條件,則**中需要多個巢狀的if語句。為了使用計算機語言簡化邏輯關係的描述,計算機語言的專家們提出了邏輯運算子的概念。邏輯運算子主要是實現了人類語言中並且、或者等連詞在計算機中的表示。使用邏輯運算子可以連線關係表示式以構成複雜的邏輯表示式。c++中共有3種邏輯運算子,分別為「&&」、「||」和「!」。其中「&&」表示邏輯與運算子,也就是「並且」的含義,當兩個表示式同時為真,其結果為真,否則為假。「||」表示邏輯或運算子,即「或者」的含義,當兩個表示式中有乙個表示式為真,結果為真,否則為假。「!」表示邏輯或運算子,即當表示式的值為真,結果為假,當表示式的值為假,其結果為真。

構成邏輯表示式的運算子有關係運算子(&&、||、!)和邏輯運算子(>、>=、

表示式以分號「;「結尾,單獨的乙個分號可以構成一條空語句:

while((*pdst++=*psrc++)!='0')

;

當在乙個控制結構的條件或邏輯表示式中完成了所需要的操作時,可以使用空語句(同時,控制結構也要求有語句體)。

空語句要避免以下錯誤;

while((*pdst++=*psrc++)!='0'); //不小心加的分號

逗號表示式是一組由逗號分隔的表示式,逗號表示式從左向右計算。逗號表示式的結果是其最右邊表示式的值。如果最右邊的運算元是左值,則逗號表示式的值也是左值。此類表示式通常用於for迴圈,用於初始或更新多個用於條件判斷的變數。

逗號表示式,從左往右計算,結果是最右邊表示式的值,如:

y=(x=2,x+=8,x+12),x+x;
結果是:x=10, y = 20

根據運算子在表示式中的位置,一般有三種表示方法:中序法(我們日常一般的寫法),前序法,後序法(運算子在運算元和前面)。對於中序法因為運算子的優先順序問題,計算機在處理上較為複雜,所以一般會將中序法轉化為前序或後序法。後序法只需要乙個堆疊快取器(前序法需要兩個)。

轉換的方式有:括號轉換法(先用括號把中序法表示式的運算子優先順序分出來,再進行運算子的移動。)、堆疊法;

C c語言運算子優先順序

優先順序 運算子名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名 單目運...

C c語言運算子優先順序

優先順序 運算子名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名 單目運...

C C 運算子優先順序

c運算子優先順序 運算子及結合性 功能 用法 l 函式呼叫 name expr list 下標 variable expr 成員選擇 object.member 成員選擇 pointer member r 後輟自增 lvalue 後輟自減 lvalue r sizeof 前輟自增 lvalue 前輟...