五 運算子和表示式

2021-06-29 12:58:45 字數 2920 閱讀 6310

這一講主要講運算子和表示式。運算子,顧名思義,就是用於計算的符號,比如+,-,*,/。表示式是用於計算的公式,由運算子、運算量(運算元)和括號組成。

有些運算子需要兩個運算元,形式為:運算元 運算子 運算元,這樣的運算子就叫做二元運算子或雙目運算子,只需要乙個運算元的運算子叫做一元運算子或單目運算子。運算子具有優先順序和結合性。

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

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

2.賦值運算子和賦值表示式

最簡單的賦值運算子就是"=",帶有賦值運算子的表示式被稱為賦值表示式。賦值表示式的型別是等號左邊物件的型別,它的結果值也是等號左邊物件被賦值後的值,賦值運算子的結合性是自右向左。即:a=b=c=1這個表示式會先從右邊算起,即先算c=1,c的值變為1這個表示式的值也是1,然後這個表示式就變成了a=b=1,再計算b=1,同樣b也變為1,b=1這個表示式的值也變成1,所以a也就變成了1。

除了"="外,賦值運算子還有+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。其中前五個是賦值運算子和算術運算子組成的,後五個是賦值運算子和位運算子組成的,這幾個賦值運算子的優先順序跟"="相同,結合性也是自右向左。

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。

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

c++中唯一乙個三元運算子是條件運算子"?"。條件表示式的使用形式是:表示式1?表示式2:表示式3。表示式1是bool型別的,表示式2,3可以是任何型別,並且型別可以不同。如:(a

6.sizeof運算子

sizeof運算子用來計算某個物件在記憶體中占用的位元組數。此運算子的使用形式為:sizeof(型別名)或sizeof(表示式)。計算結果是這個型別或者這個表示式結果在記憶體中佔的位元組數。

7.位運算

(1)按位與(&)。它是對兩個運算元的二進位制形式的每一位分別進行邏輯與操作。比如3的二進位制形式為00000011,5的二進位制形式為00000101,按位與後結果是00000001。

(2)按位或(|)。它對兩個運算元的二進位制形式的每一位分別進行邏輯或操作。還是比如3和5按位或運算後結果是00000111。

(3)按位異或(^)。它對兩個運算元的每一位進行異或,也就是如果對應位相同則運算結果為0,若對應位不同則計算結果為1。例如3和5按位異或後結果為00000110。

(4)按位取反(~)。即對乙個二進位制數的每一位求反。

(5)移位。包括左移運算(<<)和右移運算(>>),都是二元運算子。移位運算子左邊的數是需要移位的數值,右邊的數是移動的位數。左移是按指定的位數將乙個數的二進位制值向左移位,左移後,低位補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,捨棄小數部分。

運算子和表示式

運算子 1.算術運算子 定義 int i 2 1 i i 是在 使用完畢之後 2 i i 是在 之後使用 3 i i 是 3 3 是形成運算子的 4 函式是從右邊開始傳參,其中,為結束標誌 例子1 func i i i i,i 6,5,4,i,2 i最後是 7 6 5 4 7 2 例子2 i i i...

運算子和表示式

有些運算子需要兩個運算元,使用形式為 運算元 運算子 運算元,這樣的運算子就叫做二元運算子或雙目運算子,只需要乙個運算元的運算子叫做一元運算子或單目運算子。運算子具有優先順序和結合性。如果乙個表示式中有多個運算子則先進行優先順序高的運算,後進行優先順序低的運算。結合性就是指當乙個運算元左邊和右邊的運...

運算子和表示式

分享一下在c語言中運算子和表示式 1.算數運算子和算數表示式 算數 就是我們平時日常生活中的加減乘除等。在c語言中的運算符號分別為如下 加 減 乘 除 取餘 在計算機運算中也是有符號優先順序,先乘除後加減,有括號先算括號裡面的 自左向右 和平時演算法是一樣的。舉例子 2 9 7 2 8 在這個中我們...