運算(操作)是對資料的加工。最基本的運算形式常常可以用一些簡潔的符號來記憶,這些符號稱為運算子或操作符。被運算的物件-資料稱為運算量或運算元。表示式描述了對哪些資料、以什麼順序以及施加什麼樣的操作。運算量可以是常量,也可以是變數,還可以是函式。
c語言中提供了豐富的運算子,能夠構成多種表示式,它把許多基本操作都作為運算子處理。例如,c語言把賦值符作為賦值運算子。
學習運算子時應該注意以下幾點:
(1)運算子的功能。
(2)運算子與運算量的關係。
(3)運算子的優先順序。
(4)運算子的結合性。
(5)運算的結果型別。
2.3.1 算術運算
1.雙目算術運算子:+ 、- 、* 、/ 、%
(1)功能:+、-、*、 /、 %的功能分別是加、減、乘、除、求模。
(2)優先順序:*、 /、 %同級別,+、- 同級別但低於 *、 /、 %。
(3)結合性:左結合性。
(4)結果型別:相同型別的資料的運算結果仍為相同型別,不同型別的資料的運算結果為型別較高的一種型別。
(5)自反算術賦值運算子:+=、-=、*=、/=、%=
(1)結合性:右結合性。
(2)優先順序:同賦值運算子的優先順序。例如,b*=a+2等價於b=b*(a+2),而不等價於b=b*a+2。
注意:c語言的簡潔性提高了程式的效率,但也造成了閱讀與理解程式的困難。我們建議有限制地使用自反算術運算子,或者只在不會造成誤解的地方使用,或者用圓括號加以說明。
2.自加和自減運算子:++、--
(1)字首形式:先增值後引用。例如,設變數x的值為2,則執行賦值表示式y=++x後變數x和y的值分別為3和3。
(2)字尾形式:先引用後增值。例如,設變數x的值為2,則執行賦值表示式y=x++後變數x和y的值分別為3和2。
(3)優先順序:優先順序比較高,高於雙目或三目運算子。
(4)結合性:右結合性。
注意:自加自減運算子的運算物件只能是整型變數而不能是表示式或常量。例如,5++和(x+y)++都是錯誤的表示式。
3.正負號運算子:+、-
正負號運算子屬於單目運算子,其優先順序比較高,高於雙目運算子的優先順序,結合性為右結合性。
2.3.2 關係運算、邏輯運算和條件運算
1.關係運算子:>、<、>=、<=、!=、==
(1)優先順序:所有關係運算子的優先順序都比算術運算子低而比賦值運算子高,前4種關係運算子的優先順序比後2種關係運算子的優先順序高。
(2)結合性:左結合性。
(3)關係表示式的值:關係表示式的結果為「真」時用1表示,用「假」時為0表示。例如,關係表示式0.2<0.5<1.0的值為0。
注意:(1)字元資料的比較按其ascii碼值進行。
(2)在判斷兩個浮點數是否相等時,由於儲存器上的誤差,會導致錯誤的結果。例如,關係表示式1.0/90*3*3*10==1.0的結果為0,而不是1。解決的方法是判斷兩者之差的絕對值小於某個小常數。
2.符:!、&&、||
(1)優先順序:邏輯運算子「&&」和「||」的優先順序比關係運算子低但比賦值運算子高,邏輯運算子「!」的優先順序比所有的雙目運算子高。邏輯運算子「&&」的優先順序比運算子「||」的優先順序高。
(2)結合性:邏輯運算子「&&」和「||」是左結合性,單目運算子「!」是右結合性。
(3)邏輯表示式的值:邏輯表示式的結果為「真」時用1表示,為「假」時為0表示。注意:c語言在進行邏輯運算時把非0作為「真」,把0作為「假」。
注意:在c語言中,由邏輯運算「&&」和「||」組成的邏輯表示式,在特定的情況下會產生「短路」的現象。(1)在乙個「&&」表示式中,若「&&」的一端為0,則不必再計算另一端,該表示式肯定為0。由於「&&」的結合性為左結合性,因此如果左端為0時,不再計算其右端。(2)在乙個「||」表示式中,若「||」的一端為1,則不必再計算另一端,該表示式肯定為1。由於「||」的結合性為左結合性,因此如果左端為1時,不再計算其右端。
3.件運算子:? :
(1)條件運算子是c語言中唯一具有三個操作物件的運算子,它的功能是一種在兩個表示式的值中選擇乙個的操作。它的語法格式為:
e1?e2:e3
它的操作過程為:先計算表示式e1的值,若e1為「真」(非0),則整個表示式的值為表示式e2的值,否則整個表示式的值為表示式e3的值。例如,表示式b>0?a+b:a-b表示求a+|b|的值;表示式max=a>b?a:b表示求a和b中最大的數。
(2)優先順序:比賦值運算子和逗號運算子高,但比所有的其它運算子低。
(3)結合性:右結合性。
注意:整個表示式的結果型別為e2與e3二者中型別較高的一種型別。例如,表示式y<3?-1.0:2的結果型別為實型。
C語言 運算子和 運算子
變數 代表 取變數的位址 變數 代表 指標型的變數 取址運算子 用來取得其運算元的位址。如果運算元 x 的型別為 t,則表示式 x 的型別是 t 型別指標 指向 t 的指標 取址運算子的運算元必須是在記憶體中可定址到的位址。換句話說,該運算子只能用於函式或物件 例如左值 而不可以用於位欄位,以及那些...
C 中 運算子 和 運算子
運算子定義在將可空型別分配給非可空型別時返回的預設值。int?c null 若 c 為 null,則 d 為 1,否則把 c 值賦予 d int d c 1 型別名稱後加問號,如 int?i null double?d null bool?b null 可指定可為 null 的 int double...
C 的new運算子和delete運算子
c的指標如果想被分配記憶體,需要malloc函式,舉例 struct link head struct link malloc sizeof struct link 首先分配乙個struct link空間的大小,然後強轉成struct link的指標型別 這個就是鍊錶的頭節點建立。在c 中這個庫函式...