C 程式設計入門系列之五(運算子和表示式)

2021-10-25 10:11:18 字數 2825 閱讀 4112

有些運算子需要兩個運算元,使用形式為:運算元 運算子 運算元,這樣的運算子就叫做二元運算子或雙目運算子,只需要乙個運算元的運算子叫做一元運算子或單目運算子。運算子具有優先順序和結合性。如果乙個表示式中有多個運算子則先進行優先順序高的運算,後進行優先順序低的運算。結合性就是指當乙個運算元左邊和右邊的運算子優先順序相同時按什麼樣的順序進行運算,是自左向右還是自右向左,下面會具體講到。雞啄公尺來詳細介紹幾種型別的運算子和表示式。

1.算術運算子和算術表示式

算術運算子包括基本算術運算子和自增自減運算子。由算術運算子、運算元和括號組成的表示式稱為算術表示式。基本算術運算子有:+(加),-(減或負號),*(乘),/(除),%(求餘)。其中"-"作為負號時為一元運算子,作為減號時為二元運算子。優先順序跟我們數學裡的是一樣的,先乘除,後加減。"%"是求餘運算,它的運算元必須是整數,比如a%b是要計算a除以b後的餘數,它的優先順序與"/"相同,這裡要注意的是,"/"用於兩個整數相除時,結果含有小數的話小數部分會捨掉,比如2/3的結果是0。

c++的自增運算子"++"和自減運算子"--"都是一元運算子,這兩個運算子都有前置和後置兩種形式,比如i++是後置,--j是前置。無論是前置還是後置都是將運算元的值增1或減1後再存到運算元記憶體中的位置。如果i的原值是2,則i++這個表示式的結果是2,i的值則變為3,。如果j的原值也是2,則--j這個表示式的結果是1,j的值也變為1。自增或自減表示式包含到更複雜的表示式中時,比如假設i的原值是1,cout<>=,&=,^=,|=。其中前五個是賦值運算子和算術運算子組成的,後五個是賦值運算子和位運算子組成的,這幾個賦值運算子的優先順序跟"="相同,結合性也是自右向左。雞啄公尺舉幾個例子說明下,a+=5就等價於a=a+5,x*=y+3等價於x=x*(y+3)。

雞啄公尺:c++程式設計入門系列之五(運算子和表示式)

3.逗號運算子和逗號表示式

逗號也是乙個運算子,它的使用形式為:表示式1,表示式2。求這個表示式的值就要先解表示式1,然後解表示式2,最終這個逗號表示式的值是表示式2的值。比如計算a=1*2,a+3,應先計算a=1*2,結果為2,再計算a+3的值,a的值已經變成了2,再加上3為5,這個逗號表示式的最終結果就是5。

4.邏輯運算和邏輯表示式

c++中提供了用於比較的關係運算子和用於邏輯分析的邏輯運算子。

關係運算子包括<(小於)、<=(小於等於)、>(大於)、>=(大於等於)、==(等於)、!=(不等於)。前四個的優先順序相同,後兩個的優先順序相同,而且前四個比後兩個的優先順序高。用關係運算子把兩個表示式連起來就是關係表示式,關係表示式的結果型別為bool,值只能是true或false。比如,a>b,a大於b時表示式a>b表示式的值是true,否則就是false。更複雜的表示式也算是乙個道理。

邏輯運算子包括!(非)、&&(與)、||(或),優先順序依次降低。用邏輯運算子將關係表示式連起來就是邏輯表示式,邏輯表示式的結果也是bool型別,值也只能是true或false。"!"是一元運算子,使用形式是!運算元。非運算是對運算元取反。比如!a,a的值是true,則!a的值是false。"&&"是二元運算子,用來求兩個運算元的邏輯與,只有兩個運算元的值都是true,邏輯與的結果才是true,其他情況下結果都是false。"||"也是二元運算子,用來求兩個運算元的邏輯或,只有兩個運算元的值都是false時,邏輯或的結果才是false,其他情況下結果都是true。比如,int a=3,b=5,c=2,d=1; 則邏輯表示式(a>b)&&(c>d)的值為false。

5.條件運算子和條件表示式

c++中唯一的乙個三元運算子是條件運算子"?"。條件表示式的使用形式是:表示式1?表示式2:表示式3。表示式1是bool型別的,表達死2,3可以是任何型別,並且型別可以不同。條件表示式的型別是表示式2和3中較高的型別,型別的高低後面介紹。條件表示式會先解表示式1,如果表示式1的值是true,則解表示式2,表示式2的值就是條件表示式的值,而如果表示式1的值是false,則解表示式3,其值就是條件表示式的最終結果。比如:(a>),都是二元運算子。移位運算子左邊的數是需要移位的數值,右邊的數是移動的位數。左移是按指定的位數將乙個數的二進位制值向左移位,左移後,低位補0,移出的高位捨棄。右移是按照指定的位數將乙個數的二進位制值向右移位,右移後,移出的低位捨棄,如果是無符號數則高位補0,如果是有符號數,則高位補符號位或0,一般補符號位。比如,char型變數的值是-8,則它在記憶體中的二進位制補碼值是11111000,所以a>>2則需要將最右邊兩個0移出,最左邊補兩個1,因為符號位是1,則結果為11111110,對其再求補碼就得到最終結果-2。

8.混合運算時資料型別的轉換。

表示式中的型別轉換分為:隱含轉換和強制轉換。

在算術運算和關係運算中如果參與運算的運算元型別不一樣,則系統會對其進行型別轉換,這是隱含轉換,轉換的原則就是將低型別的資料轉換為高型別資料。各型別從低到高依次為char,short,int,unsigned int,long,unsigned long,float,double。型別越高範圍越大,精度也越高。隱含轉換是安全的,因為沒有精度損失。邏輯運算子的運算元必須是bool型,如果不是就需要將其轉換為bool型,非0資料轉換為true,0轉換為false。位運算運算元必須是整數,如果不是也會自動進行型別轉換,也是低型別資料轉換為高型別資料。賦值運算要求賦值運算子左邊的值和右邊的值型別相同,不同的話也要進行自動轉換,但這個時候不會遵從上面的原則而是一律將右值轉換為左值的型別。比如,int ival; float fval; double dval;則dval=ival*fval;計算時先將ival轉換為跟fval一樣的float型,乘法的結果再轉換為double型。

強制型別轉換是由型別說明符和括號來實現的,使用形式為:型別說明符(表示式) 或 (型別說明符)表示式。它是將表示式的結果型別強制轉換為型別說明符指定的型別。比如,float fval=1.2; int ival = (int)fval;計算後面表示式的值時會將1.2強制轉換成1,捨棄小數部分。

php入門五之運算子

比較運算子 例子名稱說明a a b等於 值相等就為truea a b全等 值相等且型別相同為truea a b不等值不等就為true a a b不等值不等就為truea a b不全等 值不等或型別不同就為true a a b小於值小於就為true a a b大於值大於就為true a a b小於等於...

C 程式設計入門 表示式和運算子 3

加 減 乘 除 取模 自增 自減 using system using system.collections generic using system.linq using system.text using system.threading tasks namespace 運算子和表示式 retf...

C 程式設計自學之運算子和表示式

我們了解完c 資料型別與變數之後,還會遇到變數之間的運算,例如計算兩個數的和等等運算。那麼,c 中都有那些常用的運算子呢?那麼,往下看吧!一 算數運算子 1.基本算數運算子 說到算數運算子,我們首先就應該可以想到我們數學中一些常用的運算子例如 加 減 乘 除 求餘!那麼在c 這些運算子都是如何表示的...