有些運算子需要兩個運算元,使用形式為:運算元 運算子 運算元,這樣的運算子就叫做二元運算子或雙目運算子,只需要乙個運算元的運算子叫做一元運算子或單目運算子。運算子具有優先順序和結合性。如果乙個表示式中有多個運算子則先進行優先順序高的運算,後進行優先順序低的運算。結合性就是指當乙個運算元左邊和右邊的運算子優先順序相同時按什麼樣的順序進行運算,是自左向右還是自右向左,下面會具體講到。雞啄公尺來詳細介紹幾種型別的運算子和表示式。
算術運算子包括基本算術運算子和自增自減運算子。由算術運算子、運算元和括號組成的表示式稱為算術表示式。基本算術運算子有:+(加),-(減或負號),*(乘),/(除),%(求餘)。
「%」是求餘運算,它的運算元必須是整數,比如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<
最簡單的賦值運算子就是」=」,帶有賦值運算子的表示式被稱為賦值表示式。例如n=n+2就是乙個賦值表示式,賦值表示式的作用就是把等號右邊表示式的值賦給等號左邊的物件。賦值表示式的型別是等號左邊物件的型別,它的結果值也是等號左邊物件被賦值後的值,賦值運算子的結合性是自右向左。什麼叫自右向左呢?請看這個例子:a=b=c=1這個表示式會先從右邊算起,即先算c=1,c的值變為1這個表示式的值也是1,然後這個表示式就變成了a=b=1,再計算b=1,同樣b也變為1,b=1這個表示式的值也變成1,所以a也就變成了1。
除了」=」外,賦值運算子還有+=,-=,=,/=,%=,<<=,>>=,&=,^=,|=。其中前五個是賦值運算子和算術運算子組成的,後五個是賦值運算子和位運算子組成的,這幾個賦值運算子的優先順序跟」=」相同,結合性也是自右向左。雞啄公尺舉幾個例子說明下,a+=5就等價於a=a+5,x=y+3等價於x=x*(y+3)。
逗號也是乙個運算子,它的使用形式為:表示式1,表示式2。求這個表示式的值就要先解表示式1,然後解表示式2,最終這個逗號表示式的值是表示式2的值。比如計算a=1*2,a+3,應先計算a=1*2,結果為2,再計算a+3的值,a的值已經變成了2,再加上3為5,這個逗號表示式的最終結果就是5。
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。
c++中唯一的乙個三元運算子是條件運算子」?」。條件表示式的使用形式是:表示式1?表示式2:表示式3。表示式1是bool型別的,表示式2,3可以是任何型別,並且型別可以不同。條件表示式的型別是表示式2和3中較高的型別,型別的高低後面介紹。條件表示式會先解表示式1,如果表示式1的值是true,則解表示式2,表示式2的值就是條件表示式的值,而如果表示式1的值是false,則解表示式3,其值就是條件表示式的最終結果。比如:a>b? a=5:a=6;若a>b 則給a賦值為5,否則為6
sizeof運算子用來計算某個物件在記憶體中占用的位元組數。此運算子的使用形式為:sizeof(型別名)或sizeof(表示式)。計算結果是這個型別或者這個表示式結果在記憶體中佔的位元組數。
(1)按位與(&)。它是對兩個運算元的二進位制形式的每一位分別進行邏輯與操作。比如3的二進位制形式為00000011,5的二進位制形式為00000101,按位與後結果是00000001。
(2)按位或(|)。它對兩個運算元的二進位制形式的每一位分別進行邏輯或操作。還是比如3和5按位或運算後結果是00000111。
(3)按位異或(^)。它對兩個運算元的每一位進行異或,也就是如果對應位相同則運算結果為0,若對應位不同則計算結果為1。例如3和5按位異或後結果為00000110。
(4)按位取反(~)。這是乙個一元運算子。它對乙個二進位制數的每一位求反。比如,3按位取反就是11111100。
(5)移位。包括左移運算(<<)和右移運算(>>),都是二元運算子。移位運算子左邊的數是需要移位的數值,右邊的數是移動的位數。左移是按指定的位數將乙個數的二進位制值向左移位,左移後,低位補0,移出的高位捨棄。右移是按照指定的位數將乙個數的二進位制值向右移位,右移後,移出的低位捨棄,如果是無符號數則高位補0,如果是有符號數,則高位補符號位或0,一般補符號位。比如,char型變數的值是-8,則它在記憶體中的二進位制補碼值是11111000,所以a>>2則需要將最右邊兩個0移出,最左邊補兩個1,因為符號位是1,則結果為11111110,對其再求補碼就得到最終結果-2。
表示式中的型別轉換分為:隱含轉換和強制轉換。
在算術運算和關係運算中如果參與運算的運算元型別不一樣,則系統會對其進行型別轉換,這是隱含轉換,轉換的原則就是將低型別的資料轉換為高型別資料。各型別從低到高依次為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. 運用%和/運算子需要注意什麼?
2. 什麼是逗號表示式,如何使用
3. 什麼是條件表示式,具體形式是什麼?
4. 位運算的補位規則是什麼?
5. 什麼是型別轉換,需要注意什麼?強制轉換和自動轉換的區別?
以上**雞啄公尺課堂,並做相應的修改~ 運算子和表示式
運算子 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 在這個中我們...
運算子和表示式
幾乎每乙個程式都需要進行運算,對資料進行加工處理,否則程式就沒有意義了。要進行運算,就需規定可以使用的運算子。c語言的運算子範圍很寬,把除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算子處理,例如將賦值符 作為賦值運算子 方括號作為下標運算子等。1 基本的算術運算子 最常見的算術運算子見下表...