複製鏈接
請複製以下鏈接發送給好友

c語言運算符號

鎖定
C語言運算符號指的是運算符號。C語言中的符號分為10類:算術運算符關係運算符邏輯運算符位操作運算符、賦值運算符條件運算符逗號運算符指針運算符、求字節數運算符和特殊運算符。
中文名
C語言運算符號
外文名
C language operation symbol
種類數
10種
注意事項
運算符號的優先級
相關概念
優先級、結合性
常見個數
34 種

c語言運算符號種類

用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求餘(或稱模運算,%)、自增(++)、自減(--)共七種。
用於比較運算。包括大於(>)、小於(<)、等於(==)、 大於等於(>=)、小於等於(<=)和不等於(!=)六種。
用於邏輯運算。包括與(&&)、或(||)、非(!)三種。
位操作運算符
參與運算的量,按二進制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
賦值運算符
用於賦值運算,分為簡單賦值(=)、複合算術賦值(+=,-=,*=,/=,%=)和複合位運算賦值(&=,|=,^=,>>=,<<=)三類共十一種。
條件運算符
這是一個三目運算符,用於條件求值(?:)。
逗號運算符
用於把若干表達式組合成一個表達式(,)。
用於取內容(*)和取地址(&)二種運算。
求字節數運算符
用於計算數據類型所佔的字節數(sizeof)。
特殊運算符
有括號(),下標[],成員(→,.)等幾種。
C語言是一種運算符非常豐富的語言,多達34種。其中C語言中*號出現頻率非常高,其用法分成了9類:乘法運算符、複合賦值運算符、假讀符、註釋符、普通符號、指針定義符、指向運算符、行列地址轉換符和地址值符。 [5] 

c語言運算符號運算符號的優先級

c語言運算符號1、優先級1級

結合方向 左結合(自左至右)
[ ] [1]  下標運算符
-> 指向結構體成員運算符
. 結構體成員運算符 [1]  (請注意它是一個實心圓點)

c語言運算符號2、優先級2級

結合方向 右結合(自右至左)單目運算符
! 邏輯非運算符
~ 按位取反運算符
++ 自增運算符
-- 自減運算符
- 負號運算符
(類型) 類型轉換運算符
* 指針運算符
& 地址與運算符
sizeof 長度運算符

c語言運算符號3、優先級3級

結合方向 左結合 雙目運算符
* 乘法運算符
/ 除法運算符
% 取餘運算符

c語言運算符號4、優先級4級

結合方向 左結合 雙目運算符
+ 加法運算符
- 減法運算符

c語言運算符號5、優先級5級

結合方向 左結合 雙目運算符

c語言運算符號6、優先級6級

結合方向 左結合 雙目運算符
<、<=、>、>= 關係運算符

c語言運算符號7、優先級7級

結合方向 左結合 雙目運算符
== 等於運算符 (判斷)
!= 不等於運算符(判斷)

c語言運算符號8、優先級8級

結合方向 左結合 雙目運算符
& 按位與運算符

c語言運算符號9、優先級9級

結合方向 左結合 雙目運算符
^ 按位異或運算符

c語言運算符號10、優先級10級

結合方向 左結合 雙目運算符
| 按位或運算符 舉例:0xfe|0xef 即為1111 1110 與1110 1111按位或運算則答案為:1111 1111 即0xff。

c語言運算符號11、優先級11級

結合方向 左結合 雙目運算符
&& 邏輯與運算符

c語言運算符號12、優先級12級

結合方向 左結合 雙目運算符
|| 邏輯或運算符

c語言運算符號13、優先級13級

結合方向 右結合 三目運算符

c語言運算符號14、優先級14級

結合方向 右結合 雙目運算符
+ = 加後賦值運算符 如s+=1表示s=s+1
- = 減後賦值運算符 如s-=1表示s=s-1
* = 乘後賦值運算符
/ = 除後賦值運算符
% = 取模後賦值運算符
< <= 左移後賦值運算符
>>=右移後賦值運算符
&= 按位與後賦值運算符
^=按位異或後賦值運算符
|= 按位或後賦值運算符

c語言運算符號15、優先級15級

結合方向 左結合

c語言運算符號C語言發展

現代計算機編程領域當中的 C語言自出現到發展成熟經歷了較長的一段時間, 也經歷了一次次的發展變革。C語言最初是從BCPL計算機語言中衍生而來,早在 1937 年,劍橋大學的一位研究人員利用當時現有的知識對 CPL計算機語言進行了簡化, 這樣就出現了性能更為優越的 BCPL計算機語言。人類對於新型技術的追求從未止步,即使 BCPL計算機語言在當時已經較為優秀,但人們還是在不斷地對其進行優化,於是在 1970 年,在美國的貝爾實驗室,研究人員再一次對 BCPL計算機語言進行了優化, 併成功的以 BCPL作為基礎語言,研究出了計算機 B語言,這一研究成果讓人類和計算機之間的溝通更近了一步,也有助於計算機編程領域的發展。在1972年,美國的貝爾實驗室再一次對計算機語言進行了優化,並且在這次優化當中,以計算機 B語言作為基礎,創造出了一種新型的計算機語言, 並在對這種新型計算機語言進行分析的時候以 BCPL語言的第二個字母進行了命名,這也就成為了現代計算機編程領域使用頻率較高的計算機 C語言,並在不斷運用中得以完善。為了推廣 UNIX操作系統,1977年 DennisM.Ritchie發表了不依賴於具體機器系統的 C語言編譯文本《可移植的 C語言編譯程序》。1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。ANSI於1983年夏天,在 CBEMA的領導下建立了 X3J11 委員會,目的是產生一個 C標準。X3J11在 1989年末提出了一個他們的報告[ANSI89],後來這個標準被 ISO接受為 ISO/IEC9899- 1990。1990 年,國際標準化組織 ISO(International Organization for Standards)接受了 89ANSIC為 ISOC的標準(ISO9899- 1990)。1994 年,ISO修訂了 C語言的標準。1995 年,ISO對 C90 做了一些修訂,“1995 基準增補 1(ISO/IEC/9899/AMD1:1995)”。1999 年,ISO又對C語言標準進行了修訂,在基本保留原來 C語言特徵的基礎上,針對應該的需要,增加了一些功能,尤其是對 C++ 中的一些功能,命名為ISO/IEC9899:1999。 [2] 

c語言運算符號有關概念

優先級
優先級是用來標識運算符在表達式中的運算順序的,在求解表達式的值的時候,總是先按運算符的優先次序由高到低進行操作。
當一個運算對象兩側的運算符優先級別相同時,則按運算符的結合性來確定表達式的運算順序。關於結合性的概念在其他高級語言中是沒有的,這是C語言的特點之一。在標準C語言的文檔裏,對操作符的結合性並沒有做出非常清楚的解釋。一個滿分的回答是:它是仲裁者,在幾個操作符具有相同的優先級時決定先執行哪一個。C語言也將 34 種運算符規定了不同的結合性。大多數運算符結合方向是“自左至右”,即:先左後右,也叫“左結合性”,例如 a-b + c,表達式中有-和+兩種運算符,且優先級相同,按先左後右結合方向,先圍繞減號結合,執行 a-b 的運算,再圍繞加號結合,完成運算(a-b) + c。除了左結合性外,C 語
言有三類運算符的結合方向是從右至左,也叫“右結合性”,即:單目運算符條件運算符、以及賦值運算符。着重強調一點,無論是左結合性,還是右結合性,是針對兩個相鄰的優先級相同的運行符言(不是表達中的運算對象),運算符是決定左右的基準點,先以前面的運算符(即位置上處於左邊的運算符)構造運算,就是左結合,反之,就是右結合。與運算符及表達式相關的重要概念,除運算符優先級和結合性外,C 標準定義的副作用(Side Effects)和序列點(Sequence Point)也是不可或缺的兩個概念。 [3] 
副作用
C標準對副作用的定義是,訪問易變(Volatile)型變量、修改變量、修改文件、以及調用執行前述操作的函數都是副作用。副作用可以簡單理解成,作為表達式求值過程中的副產品,某些變量的值發生了修改。
序列點
序列點是程序執行中的一個點,在這個點之前,前面的表達式的求值和副作用已經完成,而後面表達式的求值和副作用還沒有發生。C 標準定義以下序列點:
(1)運算符&&;運算符||;逗號運算符,;條件運算符?:的第一個子表達式求值結束後;
(2)函數調用運算符()中對所有實參數完成求值之後;
(3)每個完整表達式結束時。完整表達式包括變量初始化表達式,表達式語句的表達式,return 語句的表達式,if 或 switch 語句中的控制表達式,while 或 do語句的控制表達式,for 語句的所有三個表達式;
(4)標準庫函數返回之前,標準輸入輸出函數格式化轉換説明符關聯動作之後,標準查找函數和排序函數在調用比較函數之前和之後及參數傳遞之後.
由序列點的定義可知,與運算符&&;或運算符||;逗號運算符,;條件運算符?:等 4 個運算符的左操作數屬於前一個序列點,右操作數屬於後一個序列點,因此,這 4 個運算符的左操作數的求值要先於右操作數完成 [4] 
參考資料