C++的運算符十分豐富,使得C++的運算十分靈活方便。例如把賦值號(=)也作為運算符處理,這樣,a=b=c=4就是合法的表達式,這是與其他語言不同的。C++提供了以下運算符:
算術運算符
+(加) -(減) *(乘) /(除) %(整除求余) ++(自加) --(自減)
關系運算符
>(大于) <(小于) ==(等于) >=(大于或等于) <=(小于或等于) !=(不等于)
邏輯運算符
&&(邏輯與) ||(邏輯或) !(邏輯非)
位運算符
<<(按位左移) >>(按位右移) &(按位與) |(按位或) ^(按位異或) ~(按位取反)
賦值運算符 (=及其擴展賦值運算符)
條件運算符 (?:)
逗號運算符 (,)
指針運算符 (*)
引用運算符和地址運算符 (&)
求字節數運算符(sizeof)
強制類型轉換運算符( (類型) 或類型( ))
成員運算符 (.)
指向成員的運算符 (->)
下標運算符 ([ ])
其他 (如函數調用運算符())
基本的算術運算符
在本章中主要介紹算術運算符與算術表達式,賦值運算符與賦值表達式,逗號運算符與逗號表達式,其他運算符將在以后各章中陸續介紹。
需要說明,兩個整數相除的結果為整數,如5/3的結果值為1,舍去小數部分。但是,如果除數或被除數中有一個為負值,則舍入的方向是不固定的。例如,-5/3在有的C++系統上得到結果-1,有的C++系統則給出結果-2。多數編譯系統采取“向零取整”的方法,即5/3的值等于1,-5/3的值等于-1,取整后向零靠攏。
如果參加+, -, *, / 運算的兩個數中有一個數為float型數據,則運算的結果是double型,因為C++在運算時對所有float型數據都按double型數據處理。
算術表達式和運算符的優先級與結合性
用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合C++語法規則的式子,稱C++算術表達式。運算對象包括常量、變量、函數等。例如,下面是一個合法的C++算術表達式:
a*b/c-1.5+'a'
C++語言規定了運算符的優先級和結合性。在求解表達式時,先按運算符的優先級別高低次序執行,例如先乘除后加減。如有表達式a-b*c,b的左側為減號,右側為乘號,而乘號優先于減號,因此,相當于a-(b*c)。如果在一個運算對象兩側的運算符的優先級別相同,如a-b+c,則按規定的“結合方向”處理。
C++規定了各種運算符的結合方向(結合性),算術運算符的結合方向為“自左至右”,即先左后右,因此b先與減號結合,執行a-b的運算,再執行加c的運算?!白宰笾劣业慕Y合方向”又稱“左結合性”,即運算對象先與左面的運算符結合。以后可以看到有些運算符的結合方向為“自右至左”,即右結合性(例如賦值運算符)。關于“結合性”的概念在其他一些高級語言中是沒有的,是C和C++的特點之一,希望能弄清楚。
表達式中各類數值型數據間的混合運算
在表達式中常遇到不同類型數據之間進行運算,如:
10+'a'+1.5-8765.1234*'b'
在進行運算時,不同類型的數據要先轉換成同一類型,然后進行運算。轉換的規則按圖所示。
假設已指定i為整型變量,f為float變量,d為double型變量,e為long型,有下面表達式:
10+'a'+i*f-d/e
運算次序為:
進行10+'a'的運算,先將'a'轉換成整數97,運算結果為107。
進行i*f的運算。先將i與f都轉換成double型,運算結果為double型。
整數107與i*f的積相加。先將整數107轉換成雙精度數(小數點后加若干個0,即107.000…00),結果為double型。
將變量e轉換成double型,d/e結果為double型。
將10+'a'+i*f的結果與d/e的商相減,結果為double型。
上述的類型轉換是由系統自動進行的。
C++自增和自減運算符(--和++)
在C和C++中,常在表達式中使用自增(++)和自減(--)運算符,他們的作用是使變量的值增1或減1,如:
++i(在使用i之前,先使i的值加1,如果i的原值為3,則執行j=++i后,j的值為4)
--i (在使用i之前,先使i的值減1,如果i的原值為3,則執行j=--i后,j的值為2)
i++ (在使用i之后,使i的值加1,如果i的原值為3,則執行j=i++后,j的值為3,然后i變為4)
i--(在使用i之后,使i的值減1,如果i的原值為3,則執行j=i--后,j的值為3,然后i變為2)
++i是先執行i=i+1后,再使用i的值;而i++是先使用i的值后,再執行i=i+1。
正確地使用++和--,可以使程序簡潔?清晰?高效。請注意:
自增運算符(++)和自減運算符(--)只能用于變量,而不能用于常量或表達式。
++和--的結合方向是“自右至左”。
自增運算符(++)和自減運算符(--)使用十分靈活,但在很多情況下可能出現歧義性,產生“意想不到”的副作用。
自增(減)運算符在C++程序中是經常見到的,常用于循環語句中,使循環變量自動加1。也用于指針變量,使指針指向下一個地址。
新聞熱點
疑難解答
圖片精選