1.4.2 加法、減法與乘法
程序使用內(nèi)置的算術(shù)運(yùn)算符來實(shí)現(xiàn)加法(加號,+)、減法(減號,–)和乘法(星號,*)運(yùn)算。圖1-4所示結(jié)果和預(yù)期一致。
每個算術(shù)運(yùn)算符都是表達(dá)式的一部分。每個表達(dá)式都可以求出單個值。例如,表達(dá)式7 + 3求值得到10,然后發(fā)送給cout輸出。
1.4.3 理解整型與浮點(diǎn)型除法
接下來的一行代碼中使用斜線(/)來做除法運(yùn)算。然而,輸出結(jié)果可能有點(diǎn)讓人出乎意料。根據(jù)C++的實(shí)現(xiàn)方式(以及該程序平臺),7除以3等于2。為什么?原因在于,整型(沒有小數(shù)部分的數(shù))的算術(shù)運(yùn)算結(jié)果總是整型。因?yàn)?和3都是整型,所以結(jié)果也必須是整型,其小數(shù)部分被去除。
如果要得到保留小數(shù)部分的結(jié)果,那么至少需要有一個數(shù)是浮點(diǎn)型(帶小數(shù)部分的數(shù))。接下來一行代碼中表達(dá)式7.0 / 3.0的結(jié)果便保留了小數(shù)部分。這次結(jié)果更精確,是2.33333。
陷阱
您也許注意到7.0/3.0(2.33333)的結(jié)果雖然包含了小數(shù)部分,但這個結(jié)果仍然是被截短過的(真正的結(jié)果在十進(jìn)制小數(shù)點(diǎn)后面有無窮多個3) 。需要了解的是,計算機(jī)一般只存儲浮點(diǎn)數(shù)的有限個數(shù)的高位數(shù)字。然而,C++提供了不同種類的浮點(diǎn)數(shù)以滿足最苛刻的要求,甚至可以滿足計算密集型的3D游戲的要求。
1.4.4 使用取模運(yùn)算符
接下來的一條語句使用的運(yùn)算符可能比較陌生——取模運(yùn)算符(%)。取模運(yùn)算符返回整型除法的余數(shù)。在本例中,7 % 3結(jié)果為7 / 3的余數(shù)1。
1.4.5 運(yùn)算符的優(yōu)先級
C++中的算術(shù)表達(dá)式和代數(shù)學(xué)中一樣從左到右依次求值。但是有些運(yùn)算符的優(yōu)先級比較高,無論處于什么位置都將首先求值。乘法、除法和取模運(yùn)算的優(yōu)先級相同,都高于加法和減法。
接下來的一行代碼演示了優(yōu)先級的作用。因?yàn)槌朔ǖ膬?yōu)先級高于加法,所以首先計算乘法的結(jié)果。因此,表達(dá)式7 + 3*5等于7 + 15,結(jié)果為22。
如果需要首先計算較低優(yōu)先級的運(yùn)算操作,可以使用括號,它比任何算術(shù)運(yùn)算符的優(yōu)先級都高。所以在下一條語句中,表達(dá)式(7 + 3) * 5等于10 * 5,結(jié)果為50。
提示
C++運(yùn)算符一覽表及其優(yōu)先級詳見附錄B。