C++算術運算符與算術表達式


基本的算術運算符

在本章中主要介紹算術運算符與算術表達式,賦值運算符與賦值表達式,逗號運算符與逗號表達式,其他運算符將在以后各章中陸續介紹。

常見算數運算符
運算符 說明 舉例
+ 加法運算符,或正值運算符 3+5,+3
- 減法運算符,或負值運算符 5-2,-3
* 乘法運算符 3*5
/ 除法運算符 5/3
% 模運算符,或稱求余運算符 %兩側均應為整型數據,如7%4的值為3


需要說明,兩個整數相除的結果為整數,如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的運算。“自左至右的結合方向”又稱“左結合性”,即運算對象先與左面的運算符結合。以后可以看到有些運算符的結合方向為“自右至左”,即右結合性(例如賦值運算符)。關於“結合性”的概念在其他一些高級語言中是沒有的,是C和C++的特點之一,希望能弄清楚。

C++所有運算符以及它們的優先級別和結合性請查看這里:C++運算符優先級表

表達式中各類數值型數據間的混合運算

在表達式中常遇到不同類型數據之間進行運算,如:
    10+'a'+1.5-8765.1234*'b'
在進行運算時,不同類型的數據要先轉換成同一類型,然后進行運算。轉換的規則按圖2.7所示。


圖2.7


假設已指定i為整型變量,f為float變量,d為double型變量,e為long型,有下面表達式:
    10+'a'+i*f-d/e
運算次序為:

  1. 進行10+'a'的運算,先將'a'轉換成整數97,運算結果為107。
  2. 進行i*f的運算。先將i與f都轉換成double型,運算結果為double型。
  3. 整數107與i*f的積相加。先將整數107轉換成雙精度數(小數點后加若干個0,即107.000…00),結果為double型。
  4. 將變量e轉換成double型,d/e結果為double型。
  5. 將10+'a'+i*f的結果與d/e的商相減,結果為double型。


上述的類型轉換是由系統自動進行的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM