必備技能 2.4 :算術運算子
C++中定義了下面的算術運算子:
運算子 |
含義 |
+ |
加法 |
- |
減法(同時也是一元的負號) |
* |
乘法 |
/ |
除法 |
% |
模數 |
++ |
自增 |
-- |
自減 |
其中+,-,*,/運算和幾何中的含義是一樣的。這些運算子都可以用於與C++內建類型的數值型資料。它們還可以作用於char類型的資料。
模數運算%用來求取除以某個正數的餘數。回憶一下,當/運算子應用到整形數的時候,其結果的餘數會被截斷。例如,整數10除以整數3的結果是3。我們可以使用%運算子來擷取這中除法的餘數。例如,10%3=1。在C++中,%只能用於整數的運算元。它不能用於浮點數的運算元。
下面的程式示範了模數運算:
//示範模數運算
#include <iostream>
using namespace std;
int main()
{
int x,y;
x=10;
y=3;
cout<<x<<"/"<<y<<" is "<<x/y<<" with a remainder of "<<x%y<<"/n";
x=1;
y=2;
cout<<x<<"/"<<y<<" is "<<x/y<<"/n"<<x << "%" <<y << " is " << x%y <<"/n";
return 0;
}
程式的輸出結果是:
10 / 3 is 3 with a remainder of 1
1 / 2 is 0
1 % 2 is 1
自增和自減運算子
在第一章中我們介紹過++和--分別是自增和自減運算子。他們有一些特殊的性質,這使得這兩個運算子很有意思。讓我們先回憶一下自增和自減運算子的到底是幹什麼的.
自增運算子是給他的運算元加1,自減運算子是個他的運算元減一。因此,
x=x+1;
和
x++;
是一樣的。
x=x-1;
和
--x;
是一樣的。
自增和自減運算子都既可以是前運算子也可以是尾碼運算子。例如:
x=x+1;
可以寫成
x++;
或者
++x;
在上面的這個例子中,首碼和尾碼運算沒有區別。然而,當自增和自減運算子作為一個更大的運算式的一部分的時候,作為首碼和尾碼就有了重要的區別。當自增和自減運算子位於運算元的前面,C++會先進行自增和自減運算,然後才是取出變數的值參與運算式的其它部分進行運算。如果自增或者自減運算子位於運算元的後面,C++會先取運算元的值進行運算,然後才進行自增和自減運算。考慮下面的情況:
x=10; y=++x;
在這種情況下,y的值將會是11。然而,如果代碼如下:
x=10,y=x++;
則y的值將會是10。兩種情況下,X的值都會變成11。區別就在於X是什麼時候變成11 的。這種可以控制變數在什麼時候進行自增和自減的方式是很有優勢的。
算術運算子的優先順序如下:
最高優先順序 ++ --
-(一元的負號)
* / %
最低優先順序 + -
只有在同一優先順序的運算子,編譯器才會從左至右進行運算。當然,我們可以使用括弧來改變運算的先後順序。C++中的括弧實際上和其他電腦語言中的一樣:或者是用來進行強制運算的,或者是用來執行一系列運算的,或者是用來提高運算層級的。
專家答疑
問:
自增運算子++和C++這個名字有關係嗎?
答:
是的。我們都知道,C++是構建於C之上的。C++在C上做了很多增強,其中大部分都是支援物件導向的編程的。因此,C++代表著對C的增加和改進。對C這個名字後面增加++也是一個很好的解釋C++的方式。
斯特勞施特魯普期初把C++叫做“帶有類的C”,但是在Rick Mascitti的建議下,他把名字改成了C++。這個新的語言註定是要成功的,C++名字的修改實際上確保了他在曆史中的地位,因為這個名字是一個所有C程式員都能立刻認識的名字。